zoukankan      html  css  js  c++  java
  • 【Java】Java复习笔记-第二部分

    类和对象

    • 类:主观抽象,是对象的模板,可以实例化对象

      习惯上类的定义格式:

    package xxx;    
    import xxx;    
    public class Xxxx
    {
        属性 ······;
    
        构造器 ······;
    
        方法 ······;
    }
    View Code

     定义属性:实例变量

    1. 格式:[ 修饰符 ] 类型 变量名 [ = ? ]
    2. 实例变量定义在类中但在任何方法之外。
    3. 实例变量有默认值:各种各样的0。(同数组)
    4. 实例变量的作用域至少在本类内部,受访问控制符的限制。
    5. 在重合作用域,实例变量和局部变量允许有命名冲突,“局部优先”。


    定义方法:

    • 格式: [ 修饰符 ] 返回类型 方法名( 参数列表 ) [ throws 异常 ] { ······ }
    1. java中所有参数都是值传递。
    2. 当没有值返回时,返回类型必须被定义为void。
    3. 返回类型必须与方法名相邻,其他修饰符可以调换位置。

    构造器:

    1. 在创建对象的过程中调用的方法。
    2. 构造器没有返回类型。
    3. 构造器的名字与类名相同。
    4. 格式为:[ 修饰符 ] 类名( 参数列表 ){ },修饰符可以是private、 protected、 default、private

      在一个对象的生成周期中构造器只用一次,由系统自动调用,不允许手工调用。
      程序员没有提供一个构造器,系统会自动提供一个无参的构造器。

    获得对象的方式:

    • 通过new(在堆空间中申请分配空间),new 类名(),可以通过这种形式或的一个对象,这时的对象是无法使用,必须把他的地址存放进一个对象变量才能够使用。

      例如 :

    Car c=new Car();

      注意:

    • 最好在写类时提供一个无参的构造器。


    this关键字:

    • this是个隐式参数,代表当前对象;
    publie class Student
    {
        private String name;
        public void setName(String name)
        {
            this.name=name;     //this.name为当前对象的成员变量
        }
    }

      如果某个构造方法的第一个语句具有形式this( ··· ),那么这个构造方法将调用同一类中的其他构造方法。

    注意:

    1. 在构造器中this(...)必须放在该构造器的第一行。
    2. this不能出现在静态方法里面


    类、对象、实例三者的关系:

    1. 类:是对象的模板,可以实例化对象
    2. 对象:类的个体
    3. 实例:实现的对象
    student s;    
    s=new student();

      其中 Student为类,s为对象,new Student()为实例,s赋值后也是实例了。


    方法重载:

    1. 方法名相同,参数表不同,不考虑返回值类型(但最好还是使返回类型一致)。
    2. 编译器根据参数,选择一个方法,如果没有完全匹配的,对于参数表采用“向上就近匹配原则”,但不允许模棱两可。
    3. 方法重载屏蔽了一个对象的同一类方法由于参数不同所造成的差异。


    封装:

    1. 类的属性加private修饰符,来限制只能够在类的内部进行访问,有效的保护数据。
    2. 对于类中的私有属性,要对其给出一对方法getXxx(),setXxx()访问私有属性,保证对私有属性的操作的安全性。
    3. 方法公开的是方法的声明,即只须知道参数和返回值就可以调用该方法,隐藏方法的实现的细节。
    4. 一个对象和外界的联系应当通过一个统一的接口,应当公开的公开,应当隐藏的隐藏。


    继承:

    1. 父类到子类是从一般到特殊的关系。
    2. 泛化:将不同子类中的共性抽象成父类的过程。
    3. 特化:在原有父类的基础上加入一些个性的过程。
    4. 原则:父类放共性,子类放个性。
    5. 继承的关键字:extends
    6. Java只支持单继承:一个类最多只有一个直接的父类。

    方法覆盖:

    1. 方法名:相同
    2. 参数表:相同
    3. 访问限制符:相同或者更宽
    4. 返回值类型:相同或者子类返回的类型是父类返回的类型的子类(在JDK5.0以后)
    5. 抛出的异常:不能比父类更宽。

     


    super关键字:

    1. super()表示调用父类的构造器
    2. super()也和this()一样必须放在方法的第一句
    3. super()和this()不能同时出现
    4. super可以屏蔽子类属性和父类属性重名时带来的属性遮盖,super. 表示调用父类的方法或属性
    5. 在子类的构造器中如果没有指定调用父类的哪一个构造器,那么就会调用父类的无参构造器,即super()


    注意:

    1. 父类的构造器不能被子类继承
    2. 方法和属性可以被继承,权限不限制能否继承过来,限制的是能否直接访问
    3. 先构造父类,后构造子类,先this后super

     


    多态:

    1. 多态分为两种:编译时多态和运行时多态。
    2. 编译时类型:主观概念,把它看作什么。
    3. 运行时类型:客观概念,实际它是什么。

      例:Animal a=new Dog();

      指着狗问,这个动物是什么?


    运行时多态的三原则:

    1. 对象类型不变。
    2. 只能对对象调用编译时类型中定义的方法。
    3. 在程序的运行时,根据对象的运行时类型,找覆盖后的方法来调用。(运行时动态类型绑定)


    强制类型转换:

    1. 一定没有新对象生成。(父类的引用赋值给子类的引用需要进行强制类型转换)
    2. 关键字:instanceof
    3. 用法:引用 instanceof 类名 判断这个引用所指向的对象是否属于这个类。
    4. 用在强制转换之前,避免类型转换异常。
    if(a instanceof Dog)
    {
        Dog d=(Dog)a;
    }

    多态的作用:

    • 把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

    修饰符static

    1. 把对象相关的变成类相关的,它可以修饰属性、方法、代码块和内部类
    2. static修饰属性(类变量):
    3. 那么这个属性就可以用" 类名.属性名 "来访问,也就是使这个属性成为本类的类变量,为本类对象所共享。
    4. 类加载的过程,类本身也是保存在文件中(字节码文件保存着类的信息)的,java会通过I/O流把类的文件读入JVM(java虚拟机),这个过程称为类的加载。JVM会通过类路径(CLASSPATH)来找字节码文件。需要的时候才会进行类加载,生成对象时是先加载后构造
    5. 类变量,会在加载时自动初始化,初始化规则和实例变量相同。

    注意:

    1. 类中的实例变量是在创建对象时被初始化的
    2. static修饰的属性,是在类加载时被创建并进行初始化,类加载的过程只进行一次,也就是类变量只会被创建一次。


    static修饰方法(静态方法):

    1. 会使这个方法成为整个类所公有的方法,可以用" 类名.方法名 "访问。
    2. static修饰的方法,不能直接访问本类中的非静态成员,但本类的非静态方法可以访问本类的静态成员。
    3. 在静态方法中不能出现this关键字。
    4. 父类中是静态方法,子类中不能覆盖为非静态方法,在符合覆盖规则的前提下,在父子类中,父类中的静态方法可以被子类中的静态方法覆盖,但是没有多态。(在使用对象调用静态方法时其实是调用编译时类型的静态方法)
    5. java中的main方法必须写成static的原因:在类加载时无法创建对象,而静态方法可以不通过对象调用,所以在类加载时就可以通过main方法入口来运行程序。


    static修饰初始代码块:

    1. 这时这个初始代码块就叫做静态初始代码块,这个代码块只在类加载时被执行一次。
    2. 可以用静态初始代码块初始化一个类。
    3. 动态初始代码块,写在类体中的“{}”,这个代码块是在生成对象时运行,这种代码块叫动态初始代码块。

     


    单例设计模式:

    1. 一个类只允许有一个对象,保证所有引用的对象都是同一个对象。
    2. 因为只允许存在一个对象,则不允许在外面直接new出新的对象,所以应该把构造器设为private,。
    3. 在类内定义一个公开的静态方法,让使用者进行调用,通过该方法去获得一个实例。

      例:

    public calss Singleton
    {
        private static Singleton s;
        private Singleton(){}
        public static Singleton newInstance()
        {
            if ( s == null)
                s = new Singleton();
            return s;
        }
    }        
    View Code

    修饰符final

    • 不允许改变,可以修饰变量、方法、类

    final修饰变量:

    1. 被fianl修饰的变量就会变成常量,一旦赋值不能改变
    2. 常量可以在初始化时直接赋值,也可以在构造方法里赋值,只能在这两种方法里二选一,不能不为常量赋值
    3. 常量不会有默认初始值
    4. 锁定栈,使栈中的数据不可以改变
    5. 静态常量只能在初始化时直接赋值


    final修饰方法:

    • 被final修饰的方法将不能被其子类覆盖,保持方法的稳定不能被覆盖


    final修饰类:

    1. 被final修饰的类将不能被继承
    2. final类中的方法也都是final的

    注意:

    • final不能用来修饰构造方法 

    访问权限控制

    private:

    1. 本类内部可以访问
    2. 不能继承到子类
    3. default:
    • 本类内部可以访问,同包其他类也可以访问。
    • 同包可继承

    protected:

    1. 本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问。
    2. 能继承到子类

    public:

    1. 任何地方都可以访问
    2. 能继承到子类
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/lcw/p/3202417.html
Copyright © 2011-2022 走看看