Java基础(九):类的使用

文章目录

  • 一、类、对象、属性
  • 二、构造器
  • 三、方法(method)
    • 1. 方法的定义
    • 2. 方法的传参机制
    • 3. 方法重载(OverLoad)
    • 4. 方法重写/覆盖(override)
    • 5. 可变参数(Variable parameter)
  • 四、对象赋值
  • 五、内存分配机制
  • 六、作用域(scope)
  • 七、this的使用
  • 八、访问修饰符
  • 九、final关键字

一、类、对象、属性

类就是一种数据类型,对象就是一个具体的实例,属性(成员变量)是类的一部分,是一种数据类型。

注意事项和使用细节

  1. 属性的定义语法同变量,例:访问修饰符 数据类型 属性名;
  2. 属性的定义类型可以是任意类型
  3. 属性可不赋值,默认初始值

二、构造器

  1. 构造器无返回值,也不能写void
  2. 构造器名称和类名一样
  3. 一个类可有多个不同构造器,即构造器重载
  4. 构造器是完成对象的初始化,而不是创建对象
  5. 在创建对象时,系统自动调用该类的构造方法
  6. 若没定义构造器,系统自动生成默认无参构造方法
  7. 一旦定义构造器,系统不再生成默认无参构造,除非显式定义(例:public Person(){})

三、方法(method)

1. 方法的定义

class Exercise{
	public static void main(String[] args){
		Person person = new Person();//实例化对象
		person.setNameAndAge("小明", 18);
		person.printNameAndAge();
	}
}
//类
class Person{
	//属性
	String name;
	int age;
	//构造器及其重载
	public Person(){
	}
	public Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	//方法的定义
	public void setNameAndAge(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String printNameAndAge(){
		return "我的名字是" + name + ",年龄是" + age;
	}
	
}

注意事项和使用细节

  1. 一个方法最多有一个返回值
  2. 返回类型可以是任意数据类型
  3. 方法要求返回时,必须返回(return 值);方法不要求(即void),无须返回(或者只写return;)
  4. 同一个类的方法直接调用
  5. 跨类调用方法:需要通过对象名调用。
  6. 方法不能嵌套定义

2. 方法的传参机制

在方法的传参列表中:基本数据类型传的是值(值的拷贝),形参改变不影响实参;引用数据类型传的是地址,形参改变影响实参。

3. 方法重载(OverLoad)

java中允许同一个类中 ,多个同名方法的存在,但要求形参列表不一致。

注意事项和使用细节
1)方法名必须相同
2)形参至少一个不同
3)返回类型无要求

4. 方法重写/覆盖(override)

(一)方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法

(二)使用细则

  1. 子类的方法的参数,方法名称,要和父类方法的参数,方法名称完全一样。
  2. 子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类
    比如父类返回类型是Object ,子类方法返回类型是String
  3. 子类方法不能缩小父类方法的访问权限

(三)重载与重写的比较
Java基础(九):类的使用_第1张图片

5. 可变参数(Variable parameter)

java中允许将同一个类中 多个同名同功能参数个数不同的方法,封装成一个方法

public static void main(String[] args){
	int[] arr = {1, 3, 5};
	System.out.println(sum(1, 5, 100))
	System.out.println(sum(arr))// 3.
}
// 1.int...表示可以接收多个int
// 2.使用可变参数时,形参可以将其当成数组使用
// 3.可变参数的实参可以为数组
// 4.可变参数可以和普通参数混合使用,但是保证可变参数在最后
// 5.形参列表只能出现一个可变参数
public int sum(int... nums){// 1. 2.
	int res = 0;
	for(int i = 0; i < nums.length; i++){
		res += nums[i];
	}
	return res;
}
public void f1(double num, int... nums){// 4.
}

四、对象赋值

一个对象赋值给另一个队象在默认下是引用传递,赋的是地址。

Person p1 = new Person();
p1.setNameAndAge("liming", 18);
//p1将地址给p2,p3,p4
Person p2 = p1;
Person p3 = p1;
Person p4 = p1;

p2 = null;//p2的指向null,但是p1没改变

p3.setNameAndAge("liming", 20);//p3改变了p1的年龄

p4 = new Person();//p4指向一个新的地址,不会影响p1
p4.setNameAndAge("liming", 40);

五、内存分配机制

  1. 栈:一般存放基本数据类型(局部变量)
  2. 堆:存放对象
  3. 方法区:常量池、类加载信息

每调用一次方法,栈开辟一次空间

六、作用域(scope)

全局变量:作用域在整个类中,可以被其他类使用;默认赋值,可不赋值直接使用;可以加访问修饰符。
局部变量:作用域在定义它的代码块中;必须赋值后才能使用;不能使用访问控制符。

注意事项和使用细节

  1. 全局变量和局部变量可以重名,访问时就近原则
  2. 同一作用域局部变量不能重名,例如同一个方法中
  3. 属性:生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量:生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁,即在一次方法调用过程中。

七、this的使用

  1. this关键字可以用来访问本类的属性、方法、构造器
  2. this用于区分当前类的属性和局部变量
  3. 访问成员方法的语法:this.方法名(参数列表);
  4. 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句
  5. this不能在类定义的外部使用,只能在类定义的方法中使用。

八、访问修饰符

java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

  1. 公开级别:用public修饰,对外公开
  2. 受保护级别:用protected修饰,对子类和同一个包中的类公开
  3. 默认级别:没有修饰符号,向同一个包的类公开.
  4. 私有级别:用private修饰,只有类本身可以访问,不对外公开

四种访问修饰符的访问范围:
Java基础(九):类的使用_第2张图片

使用的注意事项
1)修饰符可以用来修饰类中的属性,成员方法以及类
2)只有默认的和public才能修饰类!并且遵循上述访问权限的特点
3)成员方法的访问规则和属性完全一样.

九、final关键字

final可以修饰类、属性、方法和局部变量。
使用场景:
1)不希望类被继承
2)不希望父类的某个方法被子类覆着/重写(override)
3)不希望类的的某个属性的值被修改
4)不希望某个局部变量被修改

使用细则:

  1. final修饰的属性又叫常量,一般用XX_XX_XX来命名
  2. final修饰普通属性时,必须赋初值,并且以后不能再修改,初始化的位置:
    1)定义时:如 public final double TAX_RATE = 0.08;
    2)在构造器中
    3)在代码块中
  3. final修饰静态属性时,初始化的位置:
    1)定义时
    2)在静态代码块
  4. final类不能继承,但是可以实例化对象
  5. 如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承
  6. 如果一个类已经是final类了,就没有必要再将方法修饰成final方法
  7. final不能修饰构造器
  8. final和static往往搭配使用,效率更高,底层编译器做了优化处理,此时static变量无法被修改
  9. 包装类(Integer,Double,String等)都是final类

特别说明
本文章是个人整理的学习笔记,参考b站韩顺平老师的课程(【零基础 快速学Java】韩顺平 零基础30天学会Java)。老师讲的非常好,有兴趣的可以去看一下。

你可能感兴趣的:(Java基础,java,开发语言)