权限修饰符:
企业开发中protected基本用不到,主要用priva和public
静态修饰符
static关键字:静态修饰符
1.被static修饰的成员属于类,被该类所有对象共享使用!
2.多了一种调用方式:类名.静态成员
3.静态方法只能访问类的静态成员,不能直接访问类非静态成员 非静态方法既可以访问静态成员,也可以访问非静态成员
注意:如果要在静态方法中,访问非静态成员,必须创建对象,通过对象访问
4.静态方法中,不允许出现:this,super这两种关键字。
static内存图 :
首选main方法进入方法区,JVM自动调用main方法进入栈内存(运行方法和局部变量)然后开始执行,当发现static修饰的成员变量后,会在方法区单独开辟一个静态区,这时类首先加载静态区然后再加载非静态区,当加载完后会进入一个准备阶段,给static开辟空间(可以认为是方法区内存在做)分配默认值(根据数据类型来分配),这时会有数据值和地址值。然后非静态区的变量进入堆内存(new出来的都进入堆)由堆内存分配默认值。当静态区的成员加载到堆内存当中,堆不会给static成员分配默认值,因为方法区已经分配过了,直接引用它的地址值。static成员在堆内存中只引用它的地址值,通过静态成员的地址值来给方法区的static成员数据值赋值,改变的是方法区的数据值。
public class Demo {
public static void main(String[] args) {
Student stu1 = new Student();
stu1.name = "坂井泉水";
stu1.age = 23;
stu1.school = "松荫大学";
stu1.show();
Student stu2 = new Student();
stu2.show();
stu2.school = "浙江大学";
stu1.show();
stu2.show();
}
}
<------------------------------->
public class Student {
public String name;
public int age;
public static String school;
public void show() {
System.out.println(name + "," + age + "," + school);
}
}
final
final修饰的类为最终类,不能有子类,无法被继承。
final修饰的方法:最终方法,子类不能重写。
final修饰的局部变量:最终局部变量。
特点:一旦赋值,后期程序运行过程中,其值不能发生改变。——自定义常量!
自定义常量命名规范:
1、常量名如果是一个单词的话,所有字母全部大写。
2、常量名如果是多个单词的话,所有字符全部大写,每个单词之间用 “_” 进行连接。
Tips:
被final修饰的变量如果是基本数据类型,变量的数据值无法改变。
被final修饰的变量如果是引用数据类型,变量的地址值无法改变。
final修饰成员变量:
特点:只能赋值一次,一旦赋值,后期值不可变,有两种赋值时机:
1、定义时就赋值, ——未来该类的所有对象该属性值都一样!
2、定义时不赋值,在所有构造方法执行结束前赋值!——未来不同的对象该属性值可以有差异,但是对于某一个对象来说,该对象的属性值是不能变的。