0018 Java学习笔记-面向对象-类的基本要素

时间:2023-03-08 23:08:32
0018 Java学习笔记-面向对象-类的基本要素

类与对象

  • 大街上一个个的人,就是一个个对象
  • 类是对一群对象的抽象,比如人都有性别、年龄、姓名,都会吃饭、睡觉等。姓名性别可以抽象为变量,吃饭睡觉可以抽象为方法,像下面一样定义个类来形容人
public class Person{
private String name;
private int age;
private String gender;
Person(String n,int age,String gender){
name=n;
this.age=age;
this.gender=gender;
}
public void sleep(int hours){
System.out.println(name+"睡了"+hours+"小时");
}
public void eat(String food){
System.out.println(name+"吃了"+food);
}
}

类的修饰符

  • 上面代码第一行的"public"是类的修饰符
  • 类的修饰符可以有public、final、abstract
  • public或省略:一个.java文件中,可以包含多个类,但最多只能有一个用public修饰,public表示可以被任何一个类访问,省略表示只能被同包下的其他类访问
  • final:该类不可被继承,比如java.lang.Math、java.nio.Files
  • abstract:表示该类为抽象类;不能创建抽象类的对象;有抽象方法的一定是抽象类,没有抽象方法也可以用abstract修饰为抽象类,不让创建对象

class

  • 表明这是一个类

类名

  • 上面代码第一行的"Person"是类的名字
  • 命名规则:名字有意义;首字母大写+驼峰命名法;单词与单词间不要有分隔符

花括号内部

  • 类名后面的花括号内部就是对这个类的属性和行为的描述
  • 内部成员间的顺序可以随意
  • 一般包括:
    • 成员变量:
      • 实例变量
      • 类变量(静态变量)
    • 构造方法
    • 方法
      • 实例方法
      • 静态方法

成员变量

  • 成员变量描述了一个类所处的状态
  • 成员变量的语法格式:

    [修饰符] 变量类型 成员变量名 [=默认值];
  • 访问权限修饰符:省略、public、protected、private,只能是这四个之一
    • private:表示本变量只能在本类中被访问
    • 省略:表示本变量能在这个包中被访问
    • public:表示本变量对外全部公开,能在本包、其他包中访问
    • protected:表示本变量只能在本包+本类的子类(即使在其他包)访问
  • 修饰符:static
    • 表示这个变量是静态变量,属于类自身
    • 没有这个修饰符,则说明这个变量是实例变量,属于创建的对象
    • 静态变量存储于方法区;实例变量存储在堆内存
  • 修饰符:final
    • final修饰变量:表示这个变量的值不能被修改
    • fianl修饰实例变量:声明的同时进行初始化,构造对象时赋值,之后不能修改
    • final修饰静态变量:也就是final和static联用,该变量为常量,变量名所有字母大写,单词与单词间用下划线隔开,在编译时会用其值替代这个变量。比如Math类的PI和E
  • 成员变量名:
    • 命名:首字母小写+驼峰命名法;用有意义的名词
  • 默认值:
    • 如果某个变量,所有的对象都用相同的初始值,就可以在声明变量时直接给其赋值,而不需在构造方法中赋值

构造方法

  • 构造方法用于构造类的实例;要创建这个类的实例时,通过new关键字调用构造方法
  • 语法格式

    [修饰符] 构造器名(形参列表) {方法体}
  • 权限修饰符:省略、public、protected、private
  • 构造器名:与类名相同
  • 形参列表:与方法的格式相同
  • 注意:
    • 构造器没有返回值类型,也没有void
    • 如果写了返回值类型或者void,那么就成了个普通方法了,不是构造方法
  • 在一个类的内部,可以创建这个类自身的实例
  • 一般说来,没有构造方法,就没法创建实例,因此系统会为每个没有写构造方法的类添加一个默认的无参构造方法
  • 这个默认无参构造方法创建的对象,其各个实例变量的值为0或null,基本类型为0或0.0,引用类型为null
  • 如果写了构造方法,系统就不会提供这个默认无参构造了

方法:

  • 方法用于描述一个类的行为或功能
  • 方法要么属于类,要么属于方法
  • 定义方法的语法格式

    [修饰符] 返回值类型 方法名(形参列表){方法体}
  • 访问权限修饰符:省略、public、private、protected,这四个只能有其一
    • 含义与它们修饰变量相同
  • 修饰符:abstract、final,二者只能有其一
    • abstract:表示该方法为抽象方法,对应的该类为抽象类,不能创建抽象类的对象
    • final:表示该类不能被继承,比如Math类
  • 修饰符:static
    • static修饰的方法为静态方法,是属于类本身的,而不是对象
    • 静态方法不能操作对象,因而不能访问实例变量,只能访问到静态变量,也不能调用非静态方法
    • 静态方法没有this这个隐式参数
    • 通过类名来调用静态方法;通过对象调用静态方法也符合语法,但不推荐
    • Math类的方法都是静态方法
  • 返回类型:
    • 该方法返回的数据的类型,可以是基本类型和引用类型
    • 如果不需要返回数据,那就是void
    • 方法体中要有有效的return语句,返回对应类型的数据
  • 方法名:
    • 命名:首字母小写+驼峰命名法;一般用动词开头
  • 形参列表:
    • 方法名+形参列表:叫做方法的签名,可以区分不同的方法
    • 方法名可以重复,只要形参的结构不重复,这叫方法的重载,overload
    • 参数的类型和参数的名称之间用空格隔开;多个参数间用逗号隔开
    • 调用方法时,得传入对应类型的参数
  • 方法体:
    • 类的各个要素间,不考虑先后顺序;方法体内部则有严格的顺序了

其他

  • int/long/double/float/boolean等都是基本类型
  • 类也可以看作一种数据类型,可以用类来定义一个变量,这个类就是引用类型
  • static实际上是用于区分成员变量、方法、内部类、初始化块,是属于类本身,还是对象