访问控制
1.包的概念
package语言
-
在java中使用package关键字区别同名的类
-
package的目的:解决命名冲突问题
-
包语句必须写在java文件的开头
-
格式如下:
package com.baidu.www.day01;//指定包名,不同的包名可以存着同名的类 //命名规则倒序命名法
-
java.lang包下的所有类不用导包
-
常见的java包
java.math 数学运算
java.io io包
java.utils 集合等
java.net 网络编程
java.sql 数据库
import语句
import java.util.Scanner //导入java.util.Scanner包,可以是用*通配符
2.访问修饰符
修饰符 | 本类 | 同一个包中的类 | 其它包的子类 | 其它包的其它类 |
---|---|---|---|---|
public | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不能访问 |
默认 | 可以访问 | 可以访问 | 不能访问 | 不能访问 |
private | 可以访问 | 不能访问 | 不能访问 | 不能访问 |
-
类的访问修饰符:public 和 默认的
一个java文件中只能有一个public 修饰的类
类的修饰词只有:final、abstract、public、默认的
-
内部类的修饰可以使用任意修饰词
封装
-
隐藏对的的属性和实现细节,仅对外公开接口。
-
将属性私有化,提供供外部访问的公共接口(set和get方法)
public abstract class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
static和final
Static
-
static修饰成员变量
可以直接通过 类名.属性名 直接访问
属性将不在属于对象了,而是用于描述类
static 修饰的成员变量存储在方法区中,且独一份。所以他不会随着对象的创建而创建
public class TestStatic { static int age = 0;//存储在方法区 且独一份 int score = 0; public TestStatic() { age += 1; score += 1; } public static void main(String[] args) { new TestStatic();//age : 1 score : 1 new TestStatic();//age : 2 score : 1 System.out.println(TestStatic.age);//2 System.out.println(new TestStatic().score);//score : 1 age:3 }
-
static修饰成员方法
访问:类名.方法名
静态方法中不可以访问非静态成员。
-
static 块–作用就是加载静态资源
结构:static{ } 非静态代码块:{ }
-
类的加载机制
执行顺序:静态代码块 > 代码块 > 构造方法
!!!当有static修饰的内容,会在类加载时就执行
final
-
final修饰类
不能被继承 --> 防止滥用继承
-
final修饰方法
不能被重写
-
final修饰变量
不能不改变
赋值方式:
声明时赋值
可以分开赋值,通过构造方法赋值
-
static final修饰常量
static final修饰的量为常量
声明方式:声明时初始化
命名方式是全大写,且单词之间用 “_” 隔开
常量在编译时,会直接使用常量值替换常量
案例-窗体创建的三种方式
-
第一种:
import javax.swing.*; import java.awt.*; /** * 我的第一个窗体 main里面写所有 */ public class MyFirsrJFrame { public static void main(String[] args) { //JFrame:窗体类 JFrame jf = new JFrame(); //1.窗体的标题 jf.setTitle("My first Jframe"); //获取屏幕的宽 int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕的高 int heigt = Toolkit.getDefaultToolkit().getScreenSize().height; //定义窗体的宽 int jfWidet = 400; //定义窗体的高 int jfHeight = 600; //计算水平居中x初始坐标 int jframeX = width / 2 - jfWidet / 2; //计算垂直居中y初始坐标 int jframeY = heigt / 2 - jfHeight / 2; //2.窗体的大小及位置 jf.setBounds(jframeX,jframeY,jfWidet,jfHeight); //3.默认关闭的方式 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //4.窗体可见 jf.setVisible(true); } }
-
第二种:
import javax.swing.*; import java.awt.*; /** * 我的第二个窗体 面向对象的思想,在构造方法时对窗体进行初始化 */ public class MySecondJFrame extends JFrame{ //获取屏幕的宽 int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕的高 int heigt = Toolkit.getDefaultToolkit().getScreenSize().height; //定义窗体的宽 int jfWidet = 400; //定义窗体的高 int jfHeight = 600; //计算水平居中x初始坐标 int jframeX = width / 2 - jfWidet / 2; //计算垂直居中y初始坐标 int jframeY = heigt / 2 - jfHeight / 2; public MySecondJFrame(){ //1.窗体的标题 this.setTitle("My first Jframe"); //2.窗体的大小及位置 this.setBounds(jframeX,jframeY,jfWidet,jfHeight); //3.默认关闭的方式 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //4.窗体可见 this.setVisible(true); } public static void main(String[] args) { new MySecondJFrame(); } }
-
第三种:
import javax.swing.*; /** * 我的第三个窗体 使用继承,属性工厂 * 体现代码的复用性,及面向对象的编程思想 */ public class MyThirdJFrame extends JFrame{ public MyThirdJFrame(){ //1.窗体的标题 this.setTitle("My first Jframe"); //2.窗体的大小及位置 this.setBounds(Factory.jframeX,Factory.jframeY,Factory.jfWidet,Factory.jfHeight); //3.默认关闭的方式 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //4.窗体可见 this.setVisible(true); } public static void main(String[] args) { new MyThirdJFrame(); } } import java.awt.*; /** * 工厂数字类 */ public class Factory { //获取屏幕的宽 public static int width = Toolkit.getDefaultToolkit().getScreenSize().width; //获取屏幕的高 public static int heigt = Toolkit.getDefaultToolkit().getScreenSize().height; //定义窗体的宽 public static int jfWidet = 400; //定义窗体的高 public static int jfHeight = 600; //计算水平居中x初始坐标 public static int jframeX = width / 2 - jfWidet / 2; //计算垂直居中y初始坐标 public static int jframeY = heigt / 2 - jfHeight / 2; }