2018-07-27Final+Static+匿名对象+3中代码块
Final修饰类:被Final修饰的类不可以被继承,但可以继承别的类(太监类)!
Final修饰成员方法:该方法可以被子类继承,但是不能被重写;从父类继承来的方法重写后可以加Final关键字!
Final修饰变量:基本数据类型/引用数据类型,一次赋值终身不变!
Final修饰成员变量:必须要赋初始值,一次赋值终身不变(可以在构造方法内赋初值,不可以在Set方法里赋初值,因为构造方法是在创建对象时被调用的)!
//基础知识:
Final是个修饰符,它可以用来修饰类,类的成员,以及局部变量,不能修饰构造方法!
Final特点:
Final类不可以被继承,但是可以继承其他类!
Final修饰的方法不可以被子类重写,但父类中没有被Final修饰方法,子类重写后可以加Final(可以被继承,但是不能被重写)!
Final修饰的变量为常量,这个变量只能被赋值一次,且终身不变(引用数据类型:final Test tar1=new Test//这个tar1存储的是对象的地址,如果被final修饰,这个地址是不可以改变的,但是地址中包含的属性值可以修改)!
修饰成员变量,需要在创建对象前赋值,否则报错!(也就是说,可以构造方法赋值,不可以用Set方法赋值,因为构造方法是创建对象时执行,而Set方法是创建对象完成之后,调用才可以赋值)!
Static关键字:
被Static修饰的成员变量属于类,不属于这个类的某个对象(也就是说,多个对象在访问或修改Static修饰的成员变量时,其中一个对象将Static成员变量值进行了修改,其他对象中的Static成员变量值跟着改变,即多个对象共享同一个Static成员变量)!
//被Static修饰的变量/方法是放在内存(JVM)中方法和数据共享区中的静态区被优先执行(程序开始之前)的!
Static修饰的成员可以并且建议通过类名直接访问,Static优先于Main方法执行!
访问静态成员的格式:
类名.静态成员变量名
类名.静态成员方法名(参数)
对象名.静态成员变量名 //不建议使用该方式,会出现警告!
对象名.静态成员方法名(参数) //不建议使用该方式,会出现警告!
注意:
静态内容是优先于对象存在,只能访问静态,不能使用This/Super,静态修饰的内容存于静态区!
同一个类中,静态成员只能访问静态成员,而非静态成员可以访问静态成员和普通成员!
Main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中!
//小测试:
package com.oracle.test1;
public class Test1 {
public static void main(String[] args) {
//调用Method方法:
Method();
}
//在包含Main方法的类中创建输出方法!
public void Method(){
System.out.println("测试Static");
}
}
//以上代码会报错!原因是Main方法进入方法和数据共享区中的静态区时,根本不知道下面Method方法的存在,所以会报错!
//解决方法:
①给Method加上static关键字,让Method方法和Main方法一起进入程序执行之前的静态区!
②创建Test1类的对象,用这个对象调用Method方法!
静态修饰的成员变量不管静态还是非静态都是看父类!
静态修饰的成员方法看父类!
//跟对象无关,创建对象时是谁的引用变量,就是输出时就是谁的内容!
//学这些东西是为了查JDK API做准备!
package com.oracle.test1;
public class Person {
String name="熊大";
int age=0;
public void eat(){
System.out.println("这是父类的方法!");
}
public Person getPerson(){
return new Person();
}
}
匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量!
//匿名对象特点:
创建匿名对象直接使用,没有变量名!
匿名对象在没有指定其引用变量时,只能使用一次!
匿名对象可以作为方法接收的参数/方法返回值使用!
内部类:
将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类!其他类也称为外部类!
内部类分为成员内部类与局部内部类:
我们定义内部类时,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等!在内部类中可以直接访问外部类的所有成员!
内部可以访问外部,外部方法不能访问内部方法(作用域问题)!
成员内部类:
class 外部类 {
修饰符 class 内部类 {
//其他代码
}
}
访问方式:
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
局部内部类:
局部内部类,定义在外部类方法中的局部位置!与访问方法中的局部变量相似,可通过调用方法进行访问!
定义格式:
class 外部类 {
修饰符 返回值类型 方法名(参数) {
class 内部类 {
//其他代码
}
}
}
访问方式:
在外部类方法中,创建内部类对象,进行访问!
匿名内部类,它是局部内部类的一种:
定义的匿名内部类有两个含义:
①临时定义某一指定类型的子类!
②定义后即刻创建刚刚定义的这个子类的对象!
//格式:
new 父类或接口(){
//进行方法重写
};
//访问修饰符:
|
public |
protected |
default |
private |
同一类中 |
√ |
√ |
√ |
√ |
同一包中(子类与无关类) |
√ |
√ |
√ |
|
不同包的子类 |
√ |
√ |
|
|
不同包中的无关类 |
√ |
|
|
|
代码块:
局部代码块是定义在方法或语句中!
以{}划定的代码区域,只需要关注作用域的不同即可!
方法和类都是以代码块的方式划定边界的!
构造代码块:
构造代码块是定义在类中成员位置的代码块!
优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化操作!
每创建一个对象均会执行一次构造代码块!
静态代码块:
静态代码块是定义在成员位置,使用Static修饰的代码块!
优先于主方法执行,优先于构造代码块执行,当以任意形式第一次使用到该类时执行!
该类不管创建多少对象,静态代码块只执行一次!
可用于给静态变量赋值,用来给类进行初始化!
posted on 2018-07-28 10:39 Postgre叮当牛i 阅读(141) 评论(0) 编辑 收藏 举报