final关键字
概述:学习继承之后我们知道了子类是可以继承父类的方法(方法重写)和属性,但是java中API是不是可以随便的改写呢?显然是不能,所以就出现了final关键,代表的是最终的不可改变的。
final关键字:
修饰类:不能被继承
修饰方法:不能被重写
修饰变量:不能被重新赋值
使用方法
修饰类
使用方法:final class 类名{}
修饰方法(当重写final的方法的时候,会报错):
修饰符 final 返回值类型 方法名(参数列表){
方法体
}
修饰变量:
基本数据类型:基本类型的局部变量被修饰之后,只能够赋值一次,且不能被更改。
p
ublic class FinalDemo1 {
public static void main(String[] args) {
// 声明变量,使用final修饰
final int a;
// 第一次赋值
a = 10;
// 第二次赋值
a = 20; // 报错,不可重新赋值
// 声明变量,直接赋值,使用final修饰
final int b = 10;
// 第二次赋值
b = 20; // 报错,不可重新赋值
}
}
final int c = 0;
for (int i = 0; i < 10; i++) {
c = i;
System.out.println(c);
}
这种方式会报错的
for (int i = 0; i < 10; i++) {
final int c = i;
System.out.println(c);
}
这种写法不会报错,因为每一次循环,都是一个新的变量c所以不会报错
引用类型:
引用类型的局部变量,被final修饰之后,只能指向一个对象,地址不能被修改,但是不会影响内部的成员变量值的修改
public class FinalDemo2 {
public static void main(String[] args) {
// 创建 User 对象
final User u = new User();
// 创建 另一个 User对象
u = new User(); // 报错,指向了新的对象,地址值改变。
// 调用setName方法
u.setName("张三"); // 可以修改
}
}
3.成员变量
成员变量涉及到初始化的问题,初始化的方式有两种,并且只能2选1
(1)显示初始化
public class User {
final String USERNAME = "张三";
private int age;
}
(2)构造方法初始化
public class User {
final String USERNAME ;
private int age;
public User(String username, int age) {
this.USERNAME = username;
this.age = age;
}
}
注意:被final修饰的变量名称一般都有书写规范,所有的字母都要是大写
权限修饰符
概述:
在java中提供了四种权限修饰符,使用不同的权限修饰符的时候,被修饰的内容会有不同的访问权限
public 拥有最大的权限,private则是最小的
编写代码的时候,如果没有特殊的考虑的话建议这样使用权限:
成员变量使用private 隐藏细节
构造方法使用public 方便调用对象
成员方法使用public 方便调用方法
注意当不加修饰符的时候,其访问的能力与default修饰符相同
内部类
概述:
什么是内部类?
将一个类1定义在类2中,里面的类1就是内部类,类2则是外部类
成员内部类
成员内部类定义在方法外面
class 外部类 {
class 内部类{
}
}
在描述事物的时候,若一个事物还包含有其他的事物,就可以使用内部类这种结构,比如汽车含有发动机
class Car {
//外部类
class Engine {
//内部类
}
}
访问特点:
1.内部类可以直接访问外部类的成员,包括私有成员
2.外部类如果要是要访问内部类中的成员,必须建立内部类的对象
创建内部类对象的格式
外部类名.内部类名 对象名 = new 外部类型()