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编辑  收藏  举报

导航