JAVA课堂笔记:类与对象

JAVA的类与对象

语言的进化

  • 机器语言
  • 汇编语言
  • 高级语言
    • 面向过程(程序=算法+数据)
    • 面向对象(程序=对象+消息)

面向对象

封装

  • 将数据和对数据的操作封装在一个对象中,并且对对象的使用者隐藏数据的实现过程。

继承

  • 通过抽象,抽取出某一类的多个对象的共同特性,形成“类”。子类可以继承父类的属性及功能,并能够拓展。

多态

  • 方法的多态
    • 多个操作可具有相同的名字,但方法接收的参数必须不同。
  • 继承的多态
    • 同一个操作被不同类型对象调用时,可产生不同的行为。

// 类的声明
[public][abstract|final]class 类名称
[extends 父类名称]
[implements 接口名称列表]
// 类的内容
{
    // 变量定义:刻画属性
    [public|protected|private]  // 访问控制符
    [static]    // 指明这是一个静态成员变量
    [final] // 指明变量的值不能被修改
    变量数据类型 变量名[=变量初值];

    // 方法定义:刻画功能
    [public|protected|private]
    [static]
    [final]
    [abstract]
    返回类型 方法名([参数列表])[throws exceprtionList]{
        // 方法体
    }

}
  • 代码DEMO
// 定义钟表类
public class Clock{
    // 成员变量
    int hour;
    int minute;
    int second;

    // 成员方法
    public void setTime(int newH, int newM, int newS){
        hour = newH;
        minute = newM;
        second = newS;
    }
}
  • 成员变量&局部变量
class 梯形{
    float 上底,下底,高; // 成员变量
    float 计算面积(){
        float area = (上底+下底)*高/2.0f;   // 局部变量
        return area;
    }
}

  • 实例变量&静态变量
class Puppy{
    String name;    // 实例变量
    static String wof = "汪汪~~";   // 静态变量,有static修饰
}

  • 冲突的情况
    • 成员变量被隐藏
      • 局部变量与成员变量名称相同
      • 方法参数与成员变量名称相同
    • 调用成员变量
      • 使用this关键字:this代表调用该方法的当前对象
class Puppy{
    String name = "旺财";
    void 关门放狗(){
        String name = "Tiger";
        System.out.println(this.name+",咬他!");
    }
    void 关门放狗(String name){
        System.out.println(this.name+",咬他!");
    }
}
  • 方法重载
    • 一个类中可以有多个相同名字的方法,但这些方法参数的数量或类型必须不同(与方法的返回类型和参数名字无关)
  • 构造方法
    • 特点
      • 名字必须与它所在类的名字完全相同
      • 没有返回类型
      • 可以重载
      • 每个类至少需要一个构造方法
    • 默认构造方法
      • 当类中没有构造方法,JAVA会提供一个无参数的构造方法
      • 如果该类已经定义了一个或多个构造方法,则JAVA不再提供默认构造方法。
  • 类方法和实例方法
    • 不加关键字static的是实例方法,加关键字的是类方法
    • 实例方法既能对类变量操作,也能对实例变量操作,能调用该类的所有方法
    • 类方法只能对类变量进行操作,只能调用该类的类方法
    • 对成员变量的操作只能放在方法中
      // 错误写法
      class A{
          int a;
          a = 12;
      }
      
  • 局部变量在使用前必须初始化或赋值
class A{
    int a;
    void show(){
        int b;
        int c = 12;
        System.out.println(a);  // 合法(成员变量声明后会赋初值)
        System.out.println(b);  // 非法
        System.out.println(c);  // 合法
    }
}  

对象

  • 对象是类的实例
Class object;   // 声明对象(形成一个空对象)
object = new Class();   // 创建对象(创建object实体)
object.method();    //通过.调用方法
object.a();     // 通过.引用对象实体

  • 没有实体的对象称为空对象,空对象不能使用
  • 如果一个实体不被某一对象所拥有则成为垃圾实体,Java有自动回收垃圾实体的功能,会定期检查回收垃圾实体。
  • 参数传值
    • Java中的参数传递都是传其本身保存的值
    • 传递基本类型的变量:传基本类型的变量中保存的,修改不会改变原变量
    • 传递引用类型的变量:传引用类型变量中保存的地址,修改会改变原变量
  • 可变参数
public void method1(int ...x)   // 合法
public void method2(double a, int ...x) // 合法
public void method3(int ...x, int y)    // 非法

public int getSum(int ...x){
    int sum = 0;
    for(int i=0; i<x.length; i++>){
        sum = sum+x[i];
    }
    return sum;
}

// for的省略用法
public int getSum(int ..x){
    int sum = 0;
    for(int param:x){
        sum = sum + param;
    }
    return sum;
}

static关键字

  • 类变量与类方法
    • 用static修饰的成员变量称为类变量
    • 用static修饰的方法称为类方法
  • 实例变量和类变量
    • 实例变量的内存在创建对象时才分配,每个对象的实例变量都被分配不同的内存空间
    • 类变量的内存在加载类时就创建好了,同一类的对象的类变量共享同一内存空间
  • 实例方法和类方法

this关键字

  • this:当前对象
  • this可以出现在实例方法和构造方法中,但不可以出现在类方法中
class tixing{
    float a, b, h;
    tixing(){
        this(10, 20, 10);   // 必须放在第一个语句
    }
    tixing(float x, int y, float z){
        a = x;
        b = y;
        h = z;
    }
}

  • package关键字:声明包
  • 声明包语句必须是Java源文件的第一条语句
  • import语句:引入包中的类
  • Java是动态加载类的

访问权限

  • 其他类的对象是否可以通过.操作符操作自己的变量,或使用类中的方法
  • 本类内访问不受限制
  • 访问限制修饰符
    • private
      • 只能在本类内访问
    • public
      • 在所有类中都可访问
    • 无修饰符
      • 在同一个包里可访问
    • protected
      • 能在同一包中访问,不同包的子类也能访问
  • 可以制作公有方法set和get来与外界通过消息调用的方式间接通信

类的组合

  • Java的类中可以有其他类的对象作为成员
posted @ 2020-11-17 22:40  蒙查茶  阅读(163)  评论(0)    收藏  举报