别让平淡生活,耗尽你所有的向往
—— 24.4.27
重点概述
01.知道final修饰成员之后特点
02.会使用静态代码块以及知道静态代码块的使用场景
03.会使用匿名内部类
一、权限修饰符
1.概述
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限
public:公共的,最高权限,被public修饰的成员,在哪里都能访问
protected:受保护的
defaut:默认的 注意 不写权限修饰符就是默认权限,不能直接把default写出来只有接口中的方法可以带default 不写权限修饰符就是默认的default权限修饰符
private:私有的,只能在自己的类中直接访问
2.不同权限的访问能力
同类
public: yes
protected: yes
default: yes
private: yes
同包不同类
public: yes
protected: yes
default: yes
private: no
不同包子父类
public: yes
protected: yes
default: no
private: no
不同包非子父类
public: yes
protected: no
default: no
private: no
public具有最大权限,private具有最小权限
编写代码时,如果没有特殊的考虑,建议这样使用权限:
1.属性用 private ——> 封装思想
2.成员方法 public ——> 便于调用
3.构造方法 public ——> 便于new对象
二、final关键字
1.概述:最终的
2.使用:
a、修饰一个类
b、修饰一个方法
c、修饰一个局部变量
d、修饰一个成员变量
e、修饰一个对象
3.怎么学final:只需要知道被final修饰后特点是什么
1.final修饰类
1.格式:
public final class 类名{}
2.特点:
被final修饰的类不能被继承
public final class Animal { }
public class Dog extends Animal{ }
2.final修饰方法
1.格式:
修饰符 final 返回值类型 方法名(形参){
方法体
return 结果
}
2.特点:
被final修饰的方法,不能被重写(final 最终的方法)
3.注意:
final和abstract不能同时使用
3.final修饰局部变量
1.格式:
final 数据类型 变量名 = 值
2.特点:
被final修饰的变量不能二次赋值(变量在定义时没有赋初值可以第一次定义)
public class Demo131Test { public static void main(String[] args) { final int i = 10; // i=114; 被final修饰的变量不能二次赋值 final int j; j = 100; // 属于第一次赋值 // j = 1000; // 属于第二次赋值 } }
4.final修饰对象
1.格式:
final 数据类型 对象名 = new 对象();
2.特点:
被final修饰的对象,地址值不会改变,但是对象中的属性值可以改变
3.示例:
public class Demo132Test02 { public static void main(String[] args) { Person p1 = new Person("小明",25); System.out.println(p1); final Person p2 = new Person("小红",19); p2.setName("小刚"); p2.setAge(19); System.out.println(p1.getName()+":"+p1.getAge()+" "+p1); System.out.println(p2.getName()+":"+p2.getAge()+" "+p2); } }
5.final修饰成员变量
1.格式:
final 数据类型 变量名 = 值;
2.特点:
a、需要手动赋值
b、不能二次赋值
3.示例:
如果没有初值则无法有get方法
如果有初值则无法使用set方法
public class Student { final String name = "小明"; public Student() { } public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
三、代码块
1.构造代码块
1.格式:
{
代码
}
2.执行特点:
优先于构造方法执行,每new一次,就会执行一次
2.静态代码块
1.格式:
static{
代码
}
2.执行特点:
静态代码块优先于构造方法和构造代码块执行的,而且只执行一次
3.静态代码块使用场景:
如果想让一些数据最先初始化,而且只需要初始化一次,就可以将这些数据都放到静态代码块中
示例:
public class Person { public Person(){ System.out.println("我是无参构造方法"); } // 构造代码块 { System.out.println("我是构造代码块"); } // 静态代码块 static { System.out.println("我是静态代码块"); } }
public class Demo133Test { public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); } }