董老师在硅谷 2018-03-31
学习内容:
1.final修饰词
(1)修饰类:
类无法被继承,但可以继承其他类
(2)修饰方法:
方法无法被子类重写
(3)修饰局部变量:
该变量只能被赋值一次
(4)修饰成员变量:
该变量必须在对象创建之前初始化,可以通过直接赋值、构造代码块或者利用构造器初始化
(5)修饰引用变量
该变量只有一次指向对象的机会,例:
final Hero h;
h = new Hero();
h = new Hero();//报错
public final class F {//不可被继承,但可以继承其他类
//final int b = 0 ;创建时必须初始化
final int b;
F(int b){//创建对象前必须初始化且只能被赋值一次
this. b =b;
}
public final void test1() {
System.out.println("测试");
}
public static void main(String[] args) {
final F f;//只可引用一次
final int a;//只能赋一次值
a = 5;
f = new F(4);
//f.b = 6;报错,只能赋值一次
//f = new F();报错
//a = 10;报错
}
}2.static修饰词
被static修饰的方法与成员变量被称为静态方法、静态变量或者类方法、类属性
(1)类方法可被类、实例化对象调用,类方法只能访问类属性。
(2)类属性属于“共享”属性,需要在声明时被初始化,所有实例化对象共享一个值,一改全改,一般被用作常量,加final,使其只能被赋值一次,
类属性同样可由类、实例化对象访问,推荐使用类访问。
public class F {
int w;
int t = 10;
static int s = 10; //类属性,共享值,必须被立即初始化
static{ //静态初始化块
s = 10;
}
public static void test() {
//w = 2;//报错,静态方法只能访问静态值,但是非静态方法可以访问静态属性
}
public static void main(String[] args) {
F h = new F();
h.s = 20;//一改全改
System.out.println(f.s);//
System.out.println(h.s);//
System.out.println(F.s);//类访问类属性,推荐
//静态属性、方法进入如静态区,先于非静态属性、方法创建,<br /> //非静态方法、属性随着实例化对象的产生而产生,故而静态方法无法访问非静态属性。
}
}3.内部类
(1)成员内部类:
public class Test{
int i = 8;
class bt{
int i = 7;
public void t() {
System.out.println(Hero.this.i);
}
}
public static void main(String[] args) {
h.new bt().t();/成员内部类必须在有一个外部类对象时才能存在,可访问外部类属性、方法
}
}(2)局部内部类
public class Test{
public void inner() {
class inner{
public void te() {
System.out.println("局部内部类");
}
}
inner i = new inner();
i.te();//方法内访问局部内部类
}
}(3)静态内部类
public class Test{
int i = 8;
static class win{
int i = 8;
public void t() {
//System.out.println(Hero.this.i);//无法访问外部类属性、方法
}
public void tt() {
System.out.println("静态内部类");
}
}
public static void main(String[] args) {
new win().tt();//静态内部类不需要一个外部类的实例为基础
}
}(4)匿名类
public interface Test {
public void test();
}
public class Test2{
public static void main(String[] args) {
new Test() {//匿名类,实例化同时当场重写方法
public void test() {
System.out.println("匿名类测试");
}
}.test();
Test ta = new Test() {
public void test() {
System.out.println("引用匿名类");
}
};
ta.test();
}
}4.访问修饰符
5.代码块
(1)静态代码块,最高执行优先级,先于main方法执行,一般用于初始化类属性,只执行一次。
(2)构造代码块,先于构造方法执行,一般用于初始化对象属性,每实例化一个对象就执行一次。
(3)局部代码块,大括号分隔作用域。
public class Test{
static{//静态代码块优于主方法、构造代码块执行,一般用于初始化类属性
System.out.println("静态代码块");
}
public Hero(){
System.out.println("构造方法");
}
{
System.out.println("构造代码块");
}
public static void main(String[] args) {
Test t = new Test();//构造代码块先于构造方法执行
//局部代码块 大括号分隔作用域
{
int x = 9;
System.out.println(x);//输出9
}
int x = 3;
System.out.println(x);//输出3
}
}