java修饰符
public(公共)
- 可以跨包跨类访问,只需要导入相应的包名称,就可以直接访问引用
private(私有化)
- 只能在本类中访问,子类不能继承访问。
public class Test {
public static void main(String[] args) {
People p = new People();
p.age = 12;//会报错外部类不能访问People类中被private修饰的变量
}
public class People {
private String name;
private int age;
}
}
- 可以在类中定义两个方法(get 和set方法),用于给私有化变量赋值和取值,提供外部访问。
public class Student {
private String stuname;
private Integer stuage;
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public Integer getStuage() {
return stuage;
}
public void setStuage(Integer stuage) {
this.stuage = stuage;
}
public Student() {
}
}
- 主函数测试通过get,set方法拿到值和设置值
public static void main(String[] args) {
Student stu = new Student();
stu.setStuage(20);//通过set方法设置年龄age
stu.setStuname("南辰");//通过set方法设置姓名name
System.out.println("该学生姓名:"+stu.getStuname()+",该学生年龄:"+stu.getStuage());
}
运行结果:该学生姓名:南辰,该学生年龄:20
总结:private并不能修饰外部类,对于顶层类(外部类)来说,只有两种修饰符:public和默认(default),因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。但是private是可以修饰class的,只不过该类不能使顶层类,可以是内部类,内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后,只能在该类的外部类内部使用。
static(静态)
在类中,用static声明的成员变量为静态成员变量,也成为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。
下面要重点强调:
-
static修饰的成员变量和方法,从属于类
-
普通变量和方法从属于对象
-
静态方法不能调用非静态成员,编译会报错
static关键字的用途
方便在没有创建对象的情况下进行调用(方法/变量)。
显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能
static方法
static方法也成为静态方法,由于静态方法不依赖于任何对象就可以直接访问,因此对于静态方法来说,是没有this的,因为不依附于任何对象,既然都没有对象,就谈不上this了,并且由于此特性,在静态方法中不能访问类的非静态成员变量和非静态方法,因为非静态成员变量和非静态方法都必须依赖于具体的对象才能被调用。
虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量
并且被static修饰的方法可以直接通过:类名.方法名 的方法直接使用其方法
原理图:
可以看出被static修饰的方法和变量在内存中并不属于同一个块中,不随类的加载而加载