2019-05-18 Java学习日记之面向对_权限修饰符&匿名内部类

按照功能划分:

com.xxx.add

AddStunent

AddTeacher

按照模块划分:

com.xxx.Stunedt

AddStudent

DeleteStudent

包的定义及注意事项:

A:定义包的格式

package 包名

多级包用.分开即可

B:定义包的注意事项

a:package语句必须是程序的第一条可执行的代码

b:package语句在一个java文件中只能有一个

c:如果没有package,默认表示无包名

带包的类编译和运行:

a:javac 编译的时候带上-d就行了

javac -d . xxx.java

b:通过java命令执行

java 包名.xxx(类名)

import关键字的概述和使用:

格式:

A:导包格式

import 包名;

注意:这种方式导入是到类的名称

B:package,import,class有顺序关系

权限修饰符

四种权限修饰符:

  本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
private Y      
默认 Y Y    
protected Y Y Y  
public Y Y Y Y

 类及其组成所使用的常见修饰符:

A:修饰符

权限修饰符:private,默认的,protected,public

状态修饰符:static,final

抽象修饰符:abstract

B:类

权限修饰符:默认修饰符,public

状态修饰符:final

抽象修饰符:abstract

用的最多的是:private

C:成员变量

权限修饰符:private,默认的,protected,public

状态修饰符:static,final

用的最多的是:private

D:构造方法

权限修饰符:private,默认的,protected,public

用的最多的是:public

E:成员方法

权限修饰符:private,默认的,protected,public

状态修饰符:static,final

抽象修饰符:abstract

用的最多的是:public

F:除此之外的组合规则

成员变量:public static final 接口

成员方法:

public static

public abstract

public final

成员内部类的面试题:

要求:使用一直的变量,在控制台输出30,20,10

class Outer {
    public in num = 10;
    class Inner {
        public int num = 20;
        public void show(){
            int num = 30;
            System.out.println(?);
            System.out.println(??);
            System.out.println(???);
        }
    }
}

class InnerClassTest {
    public static void main(String[] args){
        Outer.Inner oi = new Outer().new Inner();
        oi.show();
    }
}

局部内部类访问局部变量的问题:

局部内部类访问局部变量必须用final修饰。

局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?

因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用

但是jdk1.8取消了这个事情,所以我认为这是个bug,虽然取消,但是如果在书写代码的时候,没有手动添加,系统底层也会默认给你final

匿名内部类

匿名内部类的格式和理解:

A:匿名内部类

就是内部类的简化写法

B:前提:存在一个类或者接口

这里的类可以是具体类也可以是抽象类

C:格式

new 类名或者接口名 {

  重写方法;

}

D:本质是什么?

是一个继承了该类挥着实现了该接口的子类匿名对象

匿名内部类在开发中的应用:

//这里写抽象类,接口都行
abstract class Person {
    public abstract void show();
}

class PersonDemo {
    public void method(Person p){
        p.show();
    }
} 

class PersonTest {
    public static void main(String[] args){
        //如何调用PersonDemo中的method方法呢
        PersonDemo pd = new PersonDemo();
    }
} 

匿名内部类的面试题:

按照要求,补齐代码

interface Inter {
    void show();
}

class Outer {
    //补齐代码
}

class OuterDemo {
    public static void main(String[] args) {
        Outer.method().show();
    }
}

要求:在控制台输出“HelloWorld”

原文地址:https://www.cnblogs.com/clqbolg/p/10887843.html