美文网首页
java语言基础

java语言基础

作者: 沉浮_0644 | 来源:发表于2018-12-13 23:18 被阅读0次

    0.方法签名:方法名+参数列表

    1.方法的重载(Overload):
    (1)、方法名相同,参数列表不同,
    (2)、在编译器在编译时根据方法的签名自动绑定调用方法

    2.构造方法:
    (1)、给成员变量赋初值
    (2)、没有返回值类型
    (3)、在创建对象时自动调用
    (4)、

    3.this:
    只能用在方法里,放在中访问成员变量之前默认有,当成员变量与局部变量重名时,this.不能省略

    用法:this.成员变量名----------访问成员变量
        this.方法名()-----------调用方法(一般不用)
        this()调用构造方法
    

    4:null和NullPointerException:
    null:空,没有指向任何对象
    若操作发生NullPointerException:空指针异常

    5:引用类型变量画等号:
    (1)、指向同一个对象
    (2)、通过一个引用对数据的修改会影响另一个引用对数据的值
    基本类型变量画等号:
    (1)、赋值
    (2)、对一个变量的修改不会影响另一个变量的访问

    内存管理:由JVM来管理的
    (1)、堆:new出来的对象(包括成员变量)
    (2)、栈:局部变量(包括方法参数)
    (3) 、方法区:.class字节码文件(包括方法)

    回顾:
    1、方法的重载:
    (1)、发生在一个类中,参数列表不同,方法体不同
    (2)、编译器在编译时根据方法的签名自动绑定调用的方法

    2、构造方法:
    (1)、给成员变量赋初值、与类同名,没有返回值类型
    (2)、创建对象时被自动调用
    (3)、若自己不写,则默认无参构造自己写了则不再默认无参构造

    3、this:
    哪个对象调用方法指的就是那个对象
    this.成员变量-------------------访问成员变量
    this.方法名----------------------调用方法
    this()-------------------------调用构造方法

    4、null:空,没有指向任何对象
    引用的值为null

    1、引用类型数组:
    (1)、Student [] stus = new Student[10];
    stus[0] = new Student();
    stus[0].age = 25;

        Student [] stus = new Student []{
            new Student(),
            new Student(),
            new Student()
        }
    
    
    
    基本类型变量---------------------装具体的数
    引用类型变量---------------------装地址
    
    
    (2)
    
        //声明int[]的数组,包含3个元素
        //每个元素都是int[]型
        int [][] arr = new [3][];
        arr[0] = new int[2];
        arr[1] = new int[3];
    
        //给arr中第二个元素中的第一个元素赋值为100
        arr[1][0] = 100;
    
        arr-------------------------------int[][]
        arr[0]----------------------------int []
        arr[0][0]-------------------------int
    
    
    
    (3) //数组的数组 
    
        int [][] arr = new int[3][];
        arr[0] = new int [2];
        arr[1] = new int [3];
        arr[2] = new int [2];
        arr[1][0] = 100;    //给arr第二个元素中第一个元素赋值100
    
        
    (4)int [][] arr = new int[3][4];
        for(int i = 0;i<arr.length;i++){
            for(int j = 0;j<arr[i].length;j++){
                arr[i][j] = (int)(Math.random*100));
            }
        }
    

    2、继承:
    (1)、作用:代码复用
    (2)、通过extends来实现继承
    (3)、超类/父类:所有派生类所共有的属性和行为
    派生类/子类:派生类所特有的属性和行为
    (4)、派生类继承超类后,派生类具有:派生类的+超类的
    (5)、一个超类可以有多个派生类,一个派生类只能继承一个超类
    (6)、继承具有传递性
    (7)、java规定:构造派生类之前必须先构造超类
    派生类中若没有调用超类的构造方法,则默认super()调用超类的无参构造方法
    派生类若调用了超类的构造方法,则不再默认

    super()调用构造方法,必须放在派生类构造方法的第一句话。

    3:super:指代当前对象的超类对象
    (1)、super.成员变量名---------------------访问超类的成员变量
    (2)、super.方法名()---------------------调用类的方法
    (3)、super()----------------------------调用超类的构造方法

    1、向上造型:
    (1)、超类型的引用指向派生类的对象
    (2)、能点出来什么要看引用类型

    2、方法重写:
    (1)、发生在父子类中,方法名相同,参数列表相同,方法体不同。
    (2)、重写方法被调用时,看对象的类型
    (3)、重写遵循“两同两小一大”规则:
    方法名称相同,参数列表相同;派生类方法的返回值类型小于或等于超类返回值类型,派生类方法抛出的异常小于或等于超类方法 ;派生类的访问权限大于或等于超类方法的访问权限。

    超类返回值是void和基本类型必须相等,引用类型可以小于等于

    3、重写与重载的区别------------面试题
    (1)、重写(Override):

    发生在父子类中,方法名相同,参数列表相同
    遵循“运行期”绑定,看对象的类型来调用方法

    (2)、重载
    发生在一个类中,方法名相同,参数列表不同
    遵循“编译期”绑定,看参数/引用的类型来绑定方法

    (重载看参数/引用的类型,重写看对象的类型)

    编译期:java源文件,经过编译,生成.class字节码文件
    运行期:JVM加载.class并运行.class

    1、package:避免类的命名冲突
    包名可以有层次结构,同包中的类名不可以重名
    域名反写 . 项目名称 . 模块名称 . 类名
    类的全称:包名.类名
    建议:包名的字母全部小写

    import:(1)、同包中的类可以直接访问
    (2)、不同包必须用import

    2、访问控制修饰符:(数据私有化,行为公开化)
    (1)、public:公开的,任何类
    (2)、protected:本类,同包类,派生类
    (3)、默认的:本类,同包类
    (4)、private:私有的,本类使用

    说明:类的访问修饰,只能是public或默认的
    类中的成员

    3、final:最终的、不可改变的
    (1)、修饰变量:变量不可改变
    (2)、修饰方法:方法不能被重写
    (3)、修饰类:类不能被继承

    4、static:静态的
    (1)、静态变量:
    (1.1)、由static修饰
    (1.2)、属于类,存储在方法区中,只有一份
    (1.3)、常常通过类名点来访问
    (1.4)、何时使用:所有对象共享的数据

    (2)、静态方法:
        (2.1)、由static修饰
        (2.2)、属于类,存储在方法区,只有一份
        (2.3)、常常有类名来调用
        (2.4)、静态方法中不能直接访问实例成员(没有隐式this的传递),但可以访问静态成员
        (2.5)、何时用:方法的操作仅与参数相关而与对象无关
        
    (3)、静态块:
        (3.1)、属于类,在类被加载期间自动执行,因类只被加载一次,所有静态块只执行一次
        (3.2)、何时用:加载/初始化静态资源
    

    1、static final常量:
    (1)、必须声明同时初始化
    (2)、通过类名点来访问
    (3)、建议:常量名所有字母都大写,多个单词用_分隔
    (4)、编译器在编译时将常量直接替换为具体的值,效率高
    (5)、何时用:数据永远不变,并且经常使用

    2、抽象方法:
    (1)、由abstract修饰
    (2)、只有方法的定义,没有方法体

    3、抽象类:
    (1)、由abstract修饰
    (2)、包含抽象方法的类必须是抽象类(或接口)
    (3)、抽象类不能实例化
    (4)、抽象类是需要被继承的,派生类:
    (4.1)、重写所有抽象方法---------------------常用
    (4.2)、也声明为抽象类-----------------------不常用
    (5)、抽象类的意义:
    (5.1)、可以封装共有的属性和行为--------代码复用
    (5.2)、为所有派生类提供统一的类型------向上造型
    (5.3)、可以包含抽象方法,为所有派生类提供统一入口,派生类的具体行为不一样,但入口是一致的

    1、成员内部类:
    (1)、类中套类,外面的称为Outer外部类,里面的称Inter内部类
    (2)、内部类通常只服务外部类,对外不具备可见性
    (3)、内部类对象通常只在外部类创建
    (4)、内部类可以直接访问外部类成员(包括私有的)
    内部类有个隐式的

    2、匿名内部类:
    (1)、若想创建一个类的对象,并且对象只被创建一次,此时该类不必命名,称为匿名内部类
    (2)、匿名内部类中若想访问外面的变量,该变量是fianl(JDK1.7以前)
    (3)、

    MouseAdapter l = new MouseAdapter(){
    public void mouseMoved(MouseEvent e){}

    };
    

    this.addMouseListener(l); //处理鼠标操作事件
    this.addMouseMotionListener(l); //处理鼠标滑动事件

    1、接口:
    (1)、由interface定义
    (2)、数据类型只能是常量和抽象方法
    (3)、是一种数据类型
    (4)、接口不能被实例化
    (5)、接口是需要被实现的,必须重写接口中的所有抽象方法
    (6)、一个类可以实现多个接口,用逗号
    (7)、接口可以继承接口

    2、设计规则:
    (1)、将派生类所有的属性和行为,抽到超类中----------抽共性
    (2)、所有派生类的行为都一样,设计普通方法
    所有派生类的行为不一样,设计抽象方法
    (3)、将部分派生类所有的行为,抽到接口中

    1、多态:
    (1)、意义:
    (1.1)、行为多态:同一类型的引用指向不同的对象时,有不同的实现
    (1.2)、对象多态:同一对象被造型为不同类型时,有不同功能

    (2)、向上造型:
        (2.1)、超类型的引用指向派生类的对象
        (2.2)、能造型 成为的数据类型有:超类+所有实现的接口
        (2.3)、能点出什么,看引用的类型
    
    (3)、强制类型转换,成功的条件只有如下两种:
        (3.1)、引用所指向的对象,就是该类型
        (3.2)、引用所指向的对象,实现了该接口
    
    (4)、强转若不符合如上条件,则发生ClassCastException类型转换异常
    建议:在强转之前用instanceof来判断
    

    1、内存管理:由JVM管理的
    (1)、堆:
    (1.1)、存储new出来的对象(包括实例变量)
    (1.2)、垃圾:没有任何引用所指向的对象
    垃圾回收(GC)不定时到内存中清理垃圾
    回收过程是透明的(看不到的)
    不一定一发现垃圾就回收,通过调用System.gc()可以建议调度GC来回收
    (1.3)、实例变量的生命周期:创建对象时存储在堆中,对象被回收时一并被回收
    (1.4)、内存泄漏:不再使用的对象还没有被即时回收
    建议:对象不再使用时,及时将对象设置为null
    (2)、栈:
    (2.1)、存储正在调用方法中的局部变量(包括方法的参数)
    (2.2)、调用方法时会在栈中为该方法分配一块对应的栈帧,栈 帧中存储方法中的局部变量(包括参数)
    方法结束时,栈帧被清除,局部变量一并被清除
    (2.3)、
    (3)、方法区:
    (3.1)、存储.class字节码文件
    (3.2)、方法只有一份,用this.来区分具体调用对象

    实例变量:
    (1)、类中,方法外
    (2)、创建对象时存储在堆中,对象被回收时一并被回收
    (3)、有默认值

    局部变量:
    (1)、方法中
    (2)、调用方法时存储在栈中
    (3)、没有默认值

    面向对象三大特点:继承、封装、多态
    1、封装:
    (1)、类:封装的是对象的属性和行为
    (2)、方法:封装特点的业务逻辑功能实现
    (3)、访问控制修饰符:封装的是具体的访问权限

    2、继承:
    (1)、作用:代码复用
    (2)、超类:所有派生类所共有的属性和行为
    接口:部分派生类所有的共有的行为
    派生类:派生类所特有的属性和行为
    (3)传递性:单一继承,多接口实现

    3。多态:
    (1)意义:行为多态:所有抽象方法都是多态的
    对象的多态:所有对象都是多态的
    (2)、向上造型、强制类型转换,instanceof判断
    (3)、多态的表现形式:
    (3.1)、重写:根据对象的不同来表现多态
    (3.2)、重载:根据参数的不同来表现多态

    相关文章

      网友评论

          本文标题:java语言基础

          本文链接:https://www.haomeiwen.com/subject/dpjmnftx.html