• 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”

  • 相关阅读:
    RPC(简单实现)
    观察者模式
    自省(Introspector)
    Mybatis学习笔记
    Nginx
    AJAX跨域
    手写Tomcat
    监听器模式
    回调
    Temporal Segment Networks
  • 原文地址:https://www.cnblogs.com/clqbolg/p/10887843.html
Copyright © 2020-2023  润新知