JAVA基础学习笔记(三)

/ 0评 / 0
基本类型
运算符 +-*/%> == != &&||! &|^~>> >>> << ++-- ?: = +=
流程控制
数组

=====================================

面向对象
=====================================
  * 人为抽象的一种编程模型
  * 复杂问题拆分成一个一个的小问题,
    通过解决每个小问题,来解决复杂问题
  
  类
  对象、实例
  引用
  构造方法
  this
  方法重载
  继承
  方法重写
  super
  多态
  instanceof
  抽象类
  final
  static
  访问控制符
  接口
  内部类
  
  

类
===================================
  * 理解成“图纸”
  * 对事物、算法、逻辑、概念的抽象
  * 将相关的数据、运算代码,
    封装在一个类组件中


    
   
对象、实例
===================================
  * 理解成从“图纸”生产出的具体“物体”
  * 每个对象,占用独立的的内存空间,
    保存各自的属性数据
  * 每个对象,可以独立控制它执行
    指定的方法代码




引用
===================================
  * 理解成“遥控器”
  * 引用变量中,保存一个对象的内存地址
  * 通过引用变量,可以找到
    一个对象的内存空间,
    访问它的属性,或调用它的方法
  
  * 引用变量的特殊值 null
      
      *)null 空
         不引用任何对象的内存地址






构造方法
======================================
  * 新建实例时,执行的特殊方法
      
      new Soldier()
      new Car()
      new Dog()
      new Point()
  
  * 一个类,必须有构造方法
  * 如果自己不编写构造方法,
    编译器会添加默认构造方法
        
        class A {
            public A() {
                
            }
        }
  
  * 构造方法重载(不同参数)
      
        class A {
            public A(int i) {
                ...
            }
            public A(int i,double d) {
                ...
            }
            public A(int i,double d,String s) {
                ...
            }
        }
   
  * 构造方法的作用: 不知道

      *)常用来为成员变量赋值






this
=======================================
  * 两种用法:引用当前对象、构造方法间调用
  
  * 引用当前对象
        
        this保存当前对象的内存地址 
        可以用 this 调用当前对象的成员
        
          this.name
          this.f()
  
  * 构造方法之间调用 this(...)
        
        *)减少代码重复
        *)一般从参数少的方法,
          调用参数多的方法,
          多个参数集中在一个方法中处理
        
        *)必须是首行代码



方法重载
======================================
  * 同名不同参




继承
===================================
  * 作用:代码重用、代码复用
  
  * 单继承:
      *)一个类只能继承一个父类
      *)一个父类可以有多个子类
      
  * 不继承构造方法
  * 不继承不可见的成员
  
  * 方法重写 Override
      
      *)继承的方法,在子类中重新编写
  
  * 创建子类对象
      
      1)先创建父类对象
      2)再创建子类对象
      
      *)两个对象绑定在一起,作为一个子类对象

  
  * 构造方法
      
      1)创建父类对象时执行父类构造方法
      2)创建子类对象时执行子类构造方法
      
      *)默认执行父类无参构造方法
      
          super()
      
      *)可以手动调用父类有参构造方法
          
          super(参数)


  * super 两种用法
      
      *)重写方法时,调用父类同一个方法的代码
          
          super.toString()
      
      *)手动调用父类构造方法
          
          super()     默认
          super(参数) 手动
          
          *)必须是首行代码


多态
=====================================
  * 作用: 一致的类型
  
  * 类型转换
      
      *) 向上转型
         子类对象,转换成父类型,
         被当做父类型处理
         
          *)向上转型之后,只能调用父类中定义的
            通用成员,不能调用子类特有的成员
      
      *) 向下转型
         已经转为父类型的子类对象,
         再转回成子类型
  
  * instanceof
      
      *) 判断对象的类型
      *) 对真实类型及其父类型判断,
         都返回 true
      
      Shape s = new Line();
      
      s instanceof Line   true
      s instanceof Shape  true



抽象类
=============================================
  * 作用:
      *)为子类提供通用代码
      *)为子类提供通用方法的定义      

  * 半成品类
  * 不能创建实例
  * 只能创建子类的实例
  * 包含抽象方法的类,必须是抽象类
  * 抽象方法调用
      
      执行子类中实现的方法



final
=====================================
  * 修饰变量、方法、类
  
  * 变量
      
      *)变量的值不可变,称为“常量”
          
          final int a = 10;
          //a = 11;//错
          
          final Point a = new Point(3, 4);
          a.x = 30;//对
          //a = new Point(4, 5);//错
          //a = null;//错

  * 方法
      
      在子类中不能重写这个方法
  
  * 类
      
      没有子类,不能被继承
  


static
=====================================
  * 静态
  * 静态成员属于类,而不属于实例
      
      class Soldier {
          int id;
          static int count;
      }
      
      Soldier s1 = new Soldier();
      Soldier s2 = new Soldier();
      s1.id = 9527;
      s2.id = 9528;
      
      s1.count = 1;
      s2.count = 2;
      
      print(s1.id);
      print(s1.count);
      
  * 访问静态成员,一般使用类名调用
      
      Soldier.count = 1;
      Soldier.count = 2;

  * 什么时候使用静态
      
      *)使用原则: 能不用就不用
          
          静态是“非面向对象”的语法
      
      *)使用场景:
          *)共享的数据
          *)工具方法
              
              Math.sqrt()
              Math.random()
              Arrays.toString()
              Integer.parseInt()


  * 静态初始化块
      
      class A {
          static {
              类加载时,只执行一次
          }
      }


常量
=====================================
  * static final
      
      final   不可变
      static  只有一个内存地址,节省内存
      
  * 常量名习惯使用全大写,单词之间加下划线
      
      static final int MAX_VALUE = 32;



对象创建过程
=====================================
  class A {
      int v1 = 1;           //实例变量,非静态
      static int v2 = 2;    //类变量,静态
      static {
          ...
      }
      public A() {
          ...
      }
  }
  -----
  class B extends A{
      int v3 = 3;
      static int v4 = 4;
      static {
          ...
      }
      public B() {
          ...
      }
  }
  -----
  B b = new B();
  
  创建过程:
  -------------------------------------
    第一次用到 A 类和 B 类
      1.加载父类,为父类静态变量分配内存
      2.加载子类,为子类静态变量分配内存
      3.执行父类静态变量赋值运算和静态初始化块
      4.执行子类静态变量赋值运算和静态初始化块
    
    再次用到 A 类和 B 类
      5.为父类对象分配内存,为非静态变量分配内存
      6.为子类对象分配内存,为非静态变量分配内存
      7.执行父类非静态变量赋值运算
      8.执行父类构造方法
      9.执行子类非静态变量赋值运算
      10.执行子类构造方法










访问控制符
=====================================
  * 控制类或类中的成员的访问范围
  
              类    包    子类    任意
  public      O     O     O       O
  protected   O     O     O
  [default]   O     O
  private     O
    
  * 选择原则:尽量小范围访问
      
      public 是与其他开发者的契约,
      约定公开的东西会保持稳定不变








接口
========================================
  * 作用:结构设计工具,用来解耦合
  * 是极端的抽象类
  * 用 interface 代替了 class 关键字
  * 用 implements 代替了 extends 关键字
  * 在接口中只能定义:
      
      *)公共的常量
      *)公共的抽象方法
      *)公共的内部类、内部接口
  
  * 一个类可以同时实现多个接口
      
      class A implements B,C,D {
      }
      
      class A extends B implements C,D,E {
      }
      
  * 接口之间继承
      
      interface A extends B,C,D {
      }




内部类
==========================================
  * 定义在类内部,或局部代码块内部的类
  
  * 非静态内部类
      
        class A {
            class Inner {
            }
        }
        
        A a = new A();
        A.Inner i = a.new Inner();        
  
  * 静态内部类
        
        class A {
            static class Inner {
            }
        }
        
        A.Inner i = new A.Inner();
  
  * 局部内部类
  
        class A {
            Weapon a() {
                class Inner implements Weapon {
                }
                
                Inner i = new Inner();
                return i;
            }
        }
        
        A a = new A();
        Weapon w = a.a();
        
        
  
  * 匿名内部类
  
      Weapon w = new Weapon() {...};
      
      *)大括号是匿名类
      *)new 新建匿名类的实例
      *)继承 Weapon 作为 Weapon 的子类型
  
 
练习
===================================
  1.
    定义士兵类
    tarena.day0605.Soldier
    属性:
        int id
        int blood
    方法:
        go()
        attack()

  2.
    手电筒
    
    定义“手电筒”类
    tarena.day0701.FlashLight
    属性:
        int color
        boolean on
    方法:
        turnOn()
        turnOff()

  
  3.
    汽车
    
    tarena.day0702.Car
    属性:
        String brand
        String color
        int speed
    方法:
        go()
        stop()

  
  4.
    电子宠物
    
    tarena.day0703.Dog
    属性:
        String name
        int hungry
        int happy
    方法:
        feed()
        play()
        punish()

  
  5.
    平面坐标点
    
    tarena.day0704.Point
    属性:
        int x
        int y
    方法:
        toString() 成员变量的值连接成字符串
        distance() 距原点的距离
    
  
  6.
    学生
    tarena.day0705.Student
    属性:
        int id
        String name
        String gender
        int age
    构造方法:
        Student()
        Student(id,name)
        Student(id,name,gender)
        Student(id,name,gender,age)
    方法:
        toString()
          四个成员变量的值连接成字符串


  7.
    Person
      |- Student
      |- Employee
    
    Person
      属性:
          String name
          String gender
          int age
      构造方法:
          Person()
          Person(name,gender,age)
      方法:
          toString()
            属性的值连接成字符串
      
    Student
      属性:
          String school
    Employee
      属性:
          String company
          
          
  8.
    二维点三维点
      
    Point
      |- Point3D

    Point
      属性:
          int x
          int y
      构造方法:
          Point(x, y)
      方法:
          toString()
          distance()
    
    Point3D
      属性:
          int z
      构造方法:
          Point(x,y,z)
      方法:
          toString()
          distance()
          

  9.
    电子宠物
    
    Pet
      |- Dog
      |- Cat

  10.
    图形形状
    
      Shape
        |- Line
        |- Circle
        |- Square
      
      Shape
        方法:
          draw()
          clean()
      
      子类中重写 draw() 方法

  
  11.
      员工工资、奖金
      Employee
        |- Programmer
        |- Manager
      
      Employee
        gongZi()    抽象
        jiangJin()  抽象
        zongHe()

评论已关闭。