权限修饰符:
是用来控制一个成员能够被访问的范围的。
权限修饰符范围:
有四种作用范围由小到大(private<空着不写(缺省/默写)<protected<public):
修饰符 | 同一个类中 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
private | √ | |||
空着不写 | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
权限修饰符的使用规则:
实际开发中,一般只用private和public
- 成员变量私有
- 方法公开
特例:如果方法中的代码时抽取其他方法中共性代码,这个方法一般也私有
代码块(权限范围):
- 局部代码块
局部代码块:提前结束变量的生命周期,变量定义在代码块中,大括号结束,变量的周期也就结束了。只有在大括号中使用变量a。(节约内存,但该技术淘汰,以前计算机内存小,所有要节约,但现在计算机内存都十多个G了,也就不是太需要了。)
public class Test{
public static void main(String[] args){
{//局部代码块(写在方法里的大括号)
int a=10;
System.out.println(a);
}
}
}
- 构造代码块(不要求熟练使用,知道就行)
package com.itheima;
public class Student {
private String name;
private int age;
//构造代码块:
//1.写在成员位置的代码块
//2.作用:可以把多个构造方法中重复的代码抽取出来
//3.执行周期:我们在创建本类对象的时候会先执行构造代码块再执行构造方法
{
System.out.println("开始创建对象了");
}
public Student() {
System.out.println("空参构造");
}
public Student(String name, int age) {
System.out.println("有参构造");
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//主函数,用来测试(为了方便起见在Student类中就测试了)
public static void main(String[] args) {
Student student=new Student();//先执行构造代码块,再执行空参构造
Student student1=new Student("李白",18);
}
}
输出结果:
开始创建对象了
空参构造
开始创建对象了
有参构造
还要另外两种写法:
package com.itheima;
//第一种写法,调用本类中其他方法,
public class Student {
private String name;
private int age;
public Student() {
this(null,0);//不知道name与age的值直接初始值调用
}
public Student(String name, int age) {
System.out.println("开始创建对象了");
this.name = name;
this.age = age;
}
}
package com.itheima;
//第二种构造
public class Student {
private String name;
private int age;
public Student() {
调用方法(); //这里中文解释,
}
public Student(String name, int age) {
调用方法();
this.name = name;
this.age = age;
}
}
- 静态代码块
package com.itheima.codeblockdemo2;
//Student类
public class Student {
private String name;
private int age;
//执行时机
//随着类的加载而加载的,并且只执行一次
static{//静态代码块
System.out.println("静态代码块执行了");
}
public Student() {
System.out.println("空参构造");
}
public Student(String name, int age) {
System.out.println("有参构造");
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Student{name = " + name + ", age = " + age + "}";
}
}
package com.itheima.codeblockdemo2;
public class Test {
public static void main(String[] args) {
//创建对象
Student s1=new Student();//只在第一次这个创建对象的时候执行静态代码块
Student s2=new Student("lisi",90);//第二次不执行静态代码块
}
}
输出:
静态代码块执行了
空参构造
有参构造
格式:static{}
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次。
使用场景:在类加载的时候,做一些数据初始化的时候使用