一、final关键字
1.1final关键字
定义:Final用于修饰类、成员变量和成员方法。
final修饰的类,不能被继承(String、StringBuilder、StringBuffer、Math,不可变类),其中所有的方法都不能被重写(需要注意的是不能被重写,但是可以被重载),所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,和final起相反的作用);
Final修饰的方法不能被重写,但是子类可以用父类中final修饰的方法;Final修饰的成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但是对象当中的内容是允许改变的。
修饰类
格式:
final class 类名{
}
查询APl发现像 public final class string 、 public final class Math 、 public final class Scanner等,很多我们学习过的类,都是被fal修饰的,目的就是供我们使用,而不让我们所以改变其内容。
final关键字的好处
final关键字提高了性能。JVM和Java应用都会缓存final变量。
final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
关于final的重要知识点
final关键字可以用于成员变量、本地变量、方法以及类。
final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误。
不能够对final变量再次赋值。
本地变量必须在声明时赋值。
在匿名类中所有变量都必须是final变量。
final方法不能被重写。
final类不能被继承。
二、权限修饰符:
2.1 状态修饰符:
static
- 静态的意思,可以修饰成员变量,成员方法,不能修饰类,不能修饰构造方法
- 被修饰的变量,方法可以通过类名进行调用
final
- 最终的意思,可以修饰类,成员变量,成员方法,不能修饰构造方法
- 修饰的类不能被继承,被修饰的变量是常量,被修饰的方法不能被继承
2.2抽象修饰符:
abstract
- 抽象的意思,不能修饰构造方法,不能修饰成员变量,可以修饰类,成员方法
- 被修饰的类不能被实例化,只能被继承,被修饰的成员方法在子类中必须被重写
2.3 四个权限修饰符:
public:(公共权限)
- 可以修饰类,成员变量,成员方法
- 被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符
protected:(受保护权限)
- 可以修饰成员变量,成员方法,构造方法,不能修饰类(外部类,内部类不考虑)
- 被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。
- 如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
default(默认权限)
- 类,成员变量,成员方法,构造方法都能使用默认权限,即不写任何关键字
- 默认权限即同包权限,同包权限的元素只能在定义它们的类中使用,以及同包的类中被调用
private:(私有权限)
- 可以修饰成员变量,构造方法,成员方法,不能修饰类(外部类,内部类不考虑)
- 被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。
注意:
1. 并不是每个修饰符都可以修饰类(指外部类),只有public和default可以。
2. 所有修饰符都可以修饰数据成员,方法成员,构造方法。
3.为了代码安全起见,修饰符不要尽量使用权限大的,而是适用即可。比如,成员变量,如果没有特殊需要,尽可能用private.4. 修饰符修饰的是”被访问”的权限
如下表:
修饰符 | 同类中 | 同一个包中(子类和无关类) | 不同包(子类) | 不同包(无关类) |
---|---|---|---|---|
public | Y | Y | Y | Y |
protected | Y | Y | Y | N |
默认 | Y | Y | N | N |
private | Y | N | N | N |
三、内部类
定义:Java 一个类中可以嵌套另外一个类称为内部类。
语法格式如下:
class OuterClass { // 外部类 // ... class NestedClass { // 嵌套类,或称为内部类 // ... } }
匿名内部类
定义:是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 图名的 子类对象开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,有如下几步操作:
1.定义子类
2.重写接口中的方法
3.创建子类对象
4.调用重写后的方法
匿名内部类必须继承一个父类或者实现一个父接口
格式
new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
};
四、引用数据类型
4.1引用数据类型
定义: 变量名不是指向具体的数值 , 而是指向存数据的内存地址 。
4.2引用数据类型分3种:类,接口,数组;
4.2.1. 类Class引用 :
Object :Object是一个很重要的类,Object是类层次结构的根类,每个类都使用Object作为超类,所有对象(包括数组)都实现这个类的方法。用Object可以定义所有的类 如:
Object object= new Integer(1); //来定义一个Interger类
Integer i=(Integer) object; //在来把这个Object强制转换成Interger类
String :String类代表字符串,Java 程序中的所有字符串字面值(如”abc”)都作为此类的实例来实现。检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本、在该副本中、所有的字符都被转换为大写或小写形式。
Date :Date表示特定的瞬间,精确到毫秒。Date的类一般现在都被Calendar 和GregorianCalendar所有代替
Void :Void 类是一个不可实例化的占位符类,它保持一个对代表 Java 关键字 void 的 Class 对象的引用。
同时也有对应的Class如:int-Integer long-Long boolean-Boolean byte-Byte char-Character double-Double float-Float short-Short
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/130156.html