final finally finalize 区别
final 有什么用? 用于修饰类、属性和方法;
• 被 final 修饰的类不可以被继承
• 被 final 修饰的方法不可以被重写
• 被 final 修饰的变量不可以被改变,被 final 修饰不可变的是变量的引 用,而不是引用指向的内容,引用指向的内容是可以改变的
•final 可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法 表示该方法不能被重写、修饰变量表 示该变量是一个常量不能被重新赋值。
• finally 一般作用在 try-catch 代码块中,在处理异常的时候,通常我们 将一定要执行的代码方法 finally 代码块 中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭 资源的代码。
• finalize 是一个方法,属于 Object 类的一个方法,而 Object 类是所有类 的父类,该方法一般由垃圾回收器来调 用,当我们调用 System.gc() 方法的时候,由垃圾回收器调用 finalize(),回收垃圾,一个对象是否可回收的 最后判断。
this关键字
this 关键字的用法 this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指 针。 this 的用法在 java 中大体可以分为 3 种:
1.普通的直接引用,this 相当于是指向当前对象本身。
2.形参与成员名字重名,用 this 来区分:
public Person(String name, int age) { this.name = name; this.age = age; }
3.引用本类的构造函数
class Person{ private String name; private int age;
public Person(){
}
public Person(String name) { this.name = name; }
public Person(String name, int age) { this(name); this.age = age; } }
super 关键字的用法
super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离 自己最近的一个父类。
super 也有三种用法:
1.普通的直接引用 与 this 类似,super 相当于是指向当前对象的父类的引用,这样就可以用 super.xxx 来引用父类的成员。
2.子类中的成员变量或方法与父类中的成员变量或方法同名时,用 super 进行区 分
class Person{ protected String name;
public Person(String name) { this.name = name; }
}
class Student extends Person{ private String name; public Student(String name, String name1)
{ super(name); this.name = name1; } public void getInfo(){ System.out.println(this.name);
//Child System.out.println(super.name); //Father } } public class Test { public static void main(String[] args) {
Student s1 = new Student("Father","Child"); s1.getInfo(); } }
3.引用父类构造函数 • super(参数):调用父类中的某一个构造函数(应该为构造函数中的第 一条语句)。
• this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的 第一条语句)。
this 与 super 的区别
• super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐 藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如: super.变量名 super.成员函数据名(实参)
• this:它代表当前对象名(在程序中易产生二义性之处,应使用 this 来 指明当前对象;如果函数的形参与类中的成员数据同名,这时需用 this 来指明成员变量名)
• super()和 this()类似,区别是,super()在子类中调用父类的构造方法, this()在本类内调用本类的其它构造方法。
• super()和 this()均需放在构造方法内第一行。 • 尽管可以用 this 调用一个构造器,但却不能调用两个。
• this 和 super 不能同时出现在一个构造函数里面,因为 this 必然会调用 其它的构造函数,其它的构造函数必然也会有 super 语句的存在,所以在 同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会 通过。
• this()和 super()都指的是对象,所以,均不可以在 static 环境中使用。 包括:static 变量,static 方法,static 语句块。
• 从本质上讲,this 是一个指向本对象的指针, 然而 super 是一个 Java 关 键字。
static 存在的主要意义
static 的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没 有创建对象,也能使用属性和调用方法!
static 关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性 能。static 块可以置于类中的任何地方,类中可以有多个 static 块。
在类初次 被加载的时候,会按照 static 块的顺序来执行每个 static 块,并且只会执行一 次。
为什么说 static 块可以用来优化程序性能,是因为它的特性:只会在类加载的时 候执行一次。
因此,很多时候会将一些只需要进行一次的初始化操作都放在 static 代码块中进行。
static 的独特之处
1、被 static 修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变 量和方法不属于任何一个实例对象,而是被类的实例对象所共享。 怎么理解 “被类的实例对象所共享” 这句话呢?就是说,一个类的静态成员, 它是属于大伙的【大伙指的是这个类的多个对象实例,我们都知道一个类可以创 建多个实例!】,所有的类对象共享的,不像成员变量是自个的【自个指的是这 个类的单个实例对象】…我觉得我已经讲的很通俗了,你明白了咩?
2、在该类被第一次加载的时候,就会去加载被 static 修饰的部分,而且只在类 第一次使用时加载并进行初始化,注意这是第一次用就要初始化,后面根据需要 是可以再次赋值的。
3、static 变量值在类加载的时候分配空间,以后创建类对象的时候不会重新分 配。赋值的话,是可以任意赋值的!
4、被 static 修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载 完毕之后,即便没有创建对象,也可以去访问。 static 应用场景 因为 static 是被类的实例对象所共享,因此如果某个成员变量是被所有对象所 共享的,那么这个成员变量就应该定义为静态变量。
因此比较常见的 static 应用场景有:
1、修饰成员变量
2、修饰成员方法
3、静态代码块
4、修饰类【只能修饰内部 类也就是静态内部类】
5、静态导包 static 注意事项
1、静态只能访问静态。
2、非静态既可以访问非静态的,也可以访问静态的。
标签:name,对象,关键字,static,修饰,super,构造函数 From: https://www.cnblogs.com/szza/p/17632440.html