黑马程序员技术交流社区

标题: 关于包和类的简单总结 [打印本页]

作者: sunnymooni    时间: 2016-2-20 23:56
标题: 关于包和类的简单总结
package包:就是文件夹,将字节码(.class)进行分类存放
        包的写法
                package 包名;
        包的注意事项
                A:package语句必须是程序的第一条可执行的代码
                B:package语句在一个java文件中只能有一个
                C:如果没有package,默认表示无包名
       
        带包的类的编译和运行
                编译:
                        javac -d . 类名.java
                运行
                        (当前路径下,不要跑到包里面去运行) java 类的全路径名
        不同包下类之间的访问
                1)类的全路径名 变量名 = new 类的全路径名();
                2)package和class之间 加入一个"import 包;"然后 ,就可以直接访问不同包下的类了

权限修饰符的访问权限
                                本类         同一个包下(子类和无关类)        不同包下(子类)        不同包下(无关类)
                private         Y               
                默认                Y                Y
                protected        Y                Y                                Y
                public                Y                Y                                Y                Y

                private: 是为本类准备的
                默认:是为同一个包下的类准备的
                protected:是为子类准备的 无论子类在任何地方
                public: 为所有类准备的
       
               
        类:public
        成员变量:private
        构造方法:public   (当定义一个工具类的时候 可以用private)
        成员方法:public
        接口中的成员变量:public static final
        接口中的成员方法:public abstract


内部类:类内部的类就叫做内部类
        外部类访问内部类里面的内容 ,必须创建内部类的对象来访问
        内部类访问外部类的内容, 直接访问 包括私有
       
        面试题:
                要求:使用已知的变量,在控制台输出30,20,10。
               
                class Outer {
                        public int num = 10;
                        class Inner {
                                public int num = 20;
                                public void show() {
                                        int num = 30;
                                        System.out.println(num);
                                        System.out.println(this.num);
                                        System.out.println(Outer.this.num);
                                }
                        }
                }
                class InnerClassTest {
                        public static void main(String[] args) {
                                Outer.Inner oi = new Outer().new Inner();
                                oi.show();
                        }       
                }
       
        局部内部类访问局部变量,局部变量前面必须加final修饰, 为什么? 因为生命周期的问题
                因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,
                当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,
                如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
                jdk1.8可以不写final 因为jdk1.8默认给出了final

        匿名内部类:
                前提:有一个接口或者抽象类 或者 普通的类让你实现或者继承
                格式:
                        new 接口名或者抽象类名(){
                                重写方法;
                        };
                本质:就是接口或者抽象类或者普通类的一个子类对象
                应用:1)匿名内部类可以重写多个方法吗?可以! 但是一般开发中就让其重写一个方法
                      2)当我们看到一个方法的参数类型是抽象类或者接口的时候, 我们调用这个方法的时候,可以考虑
                        用匿名内部类来实现
               
        有水平的面试题:
                class Test2_NoNameInnerClass {
                        public static void main(String[] args) {
                                Outer.method().show();        //要求在控制台输出”HelloWorld”
                        }
                }
                interface Inter {
                        void show();
                }
                class Outer {
                        //补齐代码
                }

                答案:
                        public static Inter method() {
                                return new Inter() {
                                        public void show() {
                                                System.out.println("show");
                                        }
                                };
                        }
                 
               
作者: sunnymooni    时间: 2016-2-23 23:38
.................................




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2