访问修饰符
访问修饰符修饰类和类的成员
Java将类成员的可见度分为四个种类:
访问修饰符 | 本类 | 同包 | 子类 |
---|---|---|---|
private | ✓ | ||
默认 | ✓ | ✓ | |
protected | ✓ | ✓ | ✓(不同包子类也可以访问) |
public | ✓ | ✓ | ✓ |
static修饰符
修饰变量
class 类名{
public static 数据类型 变量名;
}
成员:
static: 静态成员变量,类变量;
非static :实例成员变量
class Student{
private int homework;
public static void main(String[] args){
Student stu1 = new Student();
Student stu2 = new Student();
}
}
实例成员:属于变量,存在堆中
类变量:
public class Student {
static int homeWork; // 0 实例成员变量
public static void main(String[] args) {
Student stu1= new Student();
guojing.homeWork ++; // 1
Student stu2= new Student();
huangrong.homeWork ++;// 2
System.out.println(stu1.homeWork);// 2
System.out.println(stu2.homeWork);// 2
}
}
静态变量属于类,优先于对象而存在,被所有对象所共享
类的加载初始化:
- 类的加载:把字节码.class文件加载到方法区中,并且在堆中生成字节码文件对应的对象,堆中new出的对象就是复制的这个字节码对象
- 连接:为静态变量默认初始化
- 初始化:静态块初始化
方法区:存储常量值,静态变量、XX.class的内容
静态变量
语法 :static 类型 变量名
特点:属于类;被所有对象所共享;优先于对象而存在;
使用:1) 对象名.类变量; 2) 类名.类变量(使用)
作用:共享数据。
区别:静态成员 变量 和 实例成员变量的区别
实例成员变量 | 静态成员变量 |
---|---|
属于对象 | 属于类 |
对象创建的时候创建,存在堆中 | 类加载的时候创建,存在方法区中 |
对象销毁了,成员变量就释放了 | 类卸载了(应用程序结束),就释放了 |
修饰方法
class 类名{
public static 返回值类型 方法名(参数列表){
方法体;
}
}
使用:
类名.类方法();
对象名.类方法();
注意:
1) 不能直接访问实例成员;
2)不能使用this,super
作用:
- 共享
- 使用简单;
- 此类不能创建对象时外部类只能通过调用其静态方法
实例方法 | 静态方法 |
---|---|
属于对象 | 属于类 |
可以直接访问静态和非静态的成员; | 只能直接访问静态成员 |
可以使用this,super | 不能使用this,super |
修饰代码块
class 类名{
static{
}
}
构造块:
class 类{
{
// 构造块:初始化对象
}
}
使用: new 创建对象时自动调用,先执行构造块,后调用构造器。
class Demo{
{
// 构造块
System.out.println("构造块");
}
Demo(){
System.out.println("构造器");
}
}
public class TestStaticDemo {
public static void main(String[] args) {
Demo demo = new Demo();
}
}
静态块:
执行:初始化类的时候自动执行。
class 类{
static{
// 静态块:初始化类(给静态变量初始化)
}
}
局部块:
class 类{
public void 方法(){
{
// 局部块:控制局部变量的使用范围和生命周期的。
}
}
}
public void func(){
// 局部变量
int n = 11;
{
int n1 = 22;
System.out.println(n1);
}
System.out.println(n);
}
静态导入
格式:
import static 包名.类名.静态变量名(方法);
本人水平有限,欢迎大佬们批评指正!