Java基础-2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houkai18792669930/article/details/86252038

目录

22.this关键字

23.static关键字

24.实例变量和类变量的区别

25.静态的使用注意事项

26.主函数的格式

27.静态代码块

28.单例设计模式

29. 继承 A extends B  

30.聚集关系  has a

31.super

32.重写    

33.子父类中的构造函数

34.final

35.抽象 abstract

36.模板方法设计模式

37.接口    interface


22.this关键字

    特点:this代表其所在函数所属对象的引用
    用的时候:当在函数内需要用到调用该函数的对象时,就用this来表示这个对象
    this语句:
        功能:实现构造函数之间的调用
        要求:this语句只能定义在构造函数的第一行
        Person(String name){
            this.name = name;
        }
        Person(String name,int age){
            this(name);   //注意这的this后面没有点号  这就是this语句
            this.age = age;
        }

23.static关键字

    特点:
        ① 随着类的加载而加载
        ② 优先于对象存在
        ③ 被所有对象所共享
        ④ 可以直接被类名调用
    注意:
        ① 静态方法只能访问静态成员
        ② 静态方法中不可以写this,super关键字 
        ③ 主函数是静态的
    好处:
        对对象的共享数据进行单独空间的存储,节省空间,没有每一个对象都存储一份
        可以直接被类名调用
    弊端:
        生命周期过长。
        访问出现局限性(静态只能访问静态的)

24.实例变量和类变量的区别

    ① 存放位置:类变量随着类的加载而存在方法区中
                 实例变量随着对象的建立而存于堆内存中
    ② 生命周期:类变量生命周期最长,随着类的消失而消失
                 实例变量随着对象的消失而消失

25.静态的使用注意事项

    ① 静态的只能引用静态的方法和变量而非静态的什么都可以
    ② 静态方法中不可以定义this,super关键字
    静态对象是用时候:
        当对象中出现共享数据时,该对象被静态所修饰
        对象中的特有数据要定义成非静态存在于堆内存中
    静态函数使用的时候
        当功能内部没有访问到非静态数据(对象特有数据)那么该功能可以定义成静态

26.主函数的格式

    主函数是固定格式的jvm识别,传入的是new String[0];

27.静态代码块

    static{
    //静态代码块语句
    }
    特点:随着类的加载而执行,只执行一次并且优先于主函数执行
    功能:用于给类进行初始化
    加载时间:用的时候才加载

28.单例设计模式

    解决的问题:解决一个类在内存中值存在一个对象
    ① 将构造函数私有化
    ② 在类中创建一个本类对象
    ③ 提供一个方法可以获取到该对象
    写法一:称为饿汉式(开发一般用这个因为安全)
    class Single(){
        private Single() {}
        private static Single s = new Single();
        public static Single getInstance(){
            return s;
        }
    }
    写法二:称为懒汉式(延迟加载)
    class Single(){
        private Single() {}
        private static Single s = null;
        public static Single getInstance(){
            if(s==null){
                synchronized(Single.class){
                    if(s==null){ //当CPU处理完这一句去处理别的程序去了就完蛋了
                    s = new Single();//用同步可以避免面试爱考
                    }
                }    
            }
            return s;
        }
    }

29. 继承 A extends B  

    ① 提高了代码的复用性
    ② 让类与类直接产生了关系,才有了多态的特征
    ③ java中除接口外只支持单继承,因为多继承容易带来安全隐患:当父类中功能重复,就不知运行哪一个了
    ④ java支持多层继承,也就是一个继承体系
    注意:千万不要为了获取别的类的功能而继承,必须是类与类之间有所属关系才可以继承,所属关系是 is a
    java虽不支持多继承但保留了这种机制,就是多实现
    方法:查阅父类功能,创建子类对象使用功能

30.聚集关系  has a

    ① 聚合:有什么

    ② 组合:是一部分(更紧密)

31.super

    子类中调用父类中的为了区分可以用super调用
    super 代表父类对象的引用
    super 语句一定要定义在子类构造函数的第一行

32.重写    

子父类方法要一模一样,返回类型要一模一样
    注意:
        ① 子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败
        ② 静态只能覆盖静态 

33.子父类中的构造函数

        在对子类对象进行初始化时父类的构造函数先会运行,因为所有的构造函数的第一句有一个默认的super();
    调用父类的无参的构造函数语句 
        子类必须要访问父类的构造函数,若父类没有默认的构造函数,那么子类必须要调用父类的有参的构造函数,
    否则编译不会通过,因为父类中的数据子类可以直接获取,所以子类在建立的时候要先看父类如何初始化的,
    所以子类在对对象初始化时要先访问父类的构造函数
        构造函数里面要么有this(); 要么有super(); 二者不能共存

34.final

    最终。作为一个修饰符
    ① 可以修饰类,函数,变量
    ② 被final修饰的类不可以被继承,为了避免被子类继承,被子类复写功能 
    ③ 被final修饰的方法不能被复写
    ④ 被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量也可以修饰局部变量
        public static final double PI = 3.14;
    ⑤ 内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量

35.抽象 abstract

    特点:
        ① 抽象方法只能放在抽象类中
        ② 抽象方法和抽象类都必须被abstract关键字修饰
        ③ 抽象类不可以用来new创建对象,因为调用抽象方法没有意义
        ④ 抽象类中的方法要被使用,必须由子类复写所有的抽象方法后建立子类对象调用
            如果子类只覆盖了部分的抽象方法那么该子类还是一个抽象类
        ⑤ 抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象

36.模板方法设计模式

        在定义功能时,功能的一部分是确定的,担有一部分是不确定的,而确定的部分在使用不确定的部分
    那么就将不确定的部分暴露出去,有该类的子类去完成。
    例:
        abstract class GetTime{
            final public void getTime(){
                long start = System.currentTimeMillis();
                runCode();
                long end = System.currentTimeMillis();
                System.out.println("运行的时间"+(start-end));
            }
            abstract public void runCode();
        }

        class SubTime extends GetTime{
            public void runCode(){
                for(int i=0;i<1000;i++){
                    System.out.print(i);
                }
                System.out.println();
            }
        }

        public class TemplateDemo {

            public static void main(String[] args) {
                SubTime st = new SubTime();
                st.getTime();
            }
        }

37.接口    interface

    格式特点:
        ① 接口中常见的定义:抽象方法,常量
        ② 修饰:常量:public static final
                 方法:public abstract
        ③ 接口中的成员都是 public的,只要写上了interface就有了默认的修饰符
            但是还是写全了比较好,为了提高可阅读性
    接口的特点:
        ① 接口是对外暴露规则
        ② 接口是程序的功能扩展
        ③ 接口可以用来多实现
        ④ 接口与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
        ⑤ 接口和接口之间可以有继承关系
        
    implements 实现接口的关键字
        接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口的抽象方法
    全部覆盖后,子类才可以实例化,否则子类是一个抽象类
        通过接口的名字是可以调用接口里面的常量的,因为在编译后接口也相当于类,是class文件
    接口支持多实现:
        interface A{
        }
        interface B{
        }
        class Test implements A,B{  //这就是多实现
        }
    接口与接口之间的关系:且接口之间存在多继承,因为没有方法体,是不会有冲突的但要求接口中不允许有相同的方法
        interface A{}
        interface B extends A{}
        interface C extends B,A{}

猜你喜欢

转载自blog.csdn.net/houkai18792669930/article/details/86252038