类就是一种数据类型,对象就是一个具体的实例,属性(成员变量)是类的一部分,是一种数据类型。
注意事项和使用细节
- 属性的定义语法同变量,例:访问修饰符 数据类型 属性名;
- 属性的定义类型可以是任意类型
- 属性可不赋值,默认初始值
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;
}
}
注意事项和使用细节
- 一个方法最多有一个返回值
- 返回类型可以是任意数据类型
- 方法要求返回时,必须返回(return 值);方法不要求(即void),无须返回(或者只写return;)
- 同一个类的方法直接调用
- 跨类调用方法:需要通过对象名调用。
- 方法不能嵌套定义
在方法的传参列表中:基本数据类型传的是值(值的拷贝),形参改变不影响实参;引用数据类型传的是地址,形参改变影响实参。
java中允许同一个类中 ,多个同名方法的存在,但要求形参列表不一致。
注意事项和使用细节
1)方法名必须相同
2)形参至少一个不同
3)返回类型无要求
(一)方法覆盖(重写)就是子类有一个方法,和父类的某个方法的名称、返回类型、参数一样,那么我们就说子类的这个方法覆盖了父类的方法
(二)使用细则
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);
每调用一次方法,栈开辟一次空间
全局变量:作用域在整个类中,可以被其他类使用;默认赋值,可不赋值直接使用;可以加访问修饰符。
局部变量:作用域在定义它的代码块中;必须赋值后才能使用;不能使用访问控制符。
注意事项和使用细节
- 全局变量和局部变量可以重名,访问时就近原则
- 同一作用域局部变量不能重名,例如同一个方法中
- 属性:生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量:生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁,即在一次方法调用过程中。
java提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):
使用的注意事项
1)修饰符可以用来修饰类中的属性,成员方法以及类
2)只有默认的和public才能修饰类!并且遵循上述访问权限的特点
3)成员方法的访问规则和属性完全一样.
final可以修饰类、属性、方法和局部变量。
使用场景:
1)不希望类被继承
2)不希望父类的某个方法被子类覆着/重写(override)
3)不希望类的的某个属性的值被修改
4)不希望某个局部变量被修改
使用细则:
- final修饰的属性又叫常量,一般用XX_XX_XX来命名
- final修饰普通属性时,必须赋初值,并且以后不能再修改,初始化的位置:
1)定义时:如 public final double TAX_RATE = 0.08;
2)在构造器中
3)在代码块中- final修饰静态属性时,初始化的位置:
1)定义时
2)在静态代码块- final类不能继承,但是可以实例化对象
- 如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承
- 如果一个类已经是final类了,就没有必要再将方法修饰成final方法
- final不能修饰构造器
- final和static往往搭配使用,效率更高,底层编译器做了优化处理,此时static变量无法被修改
- 包装类(Integer,Double,String等)都是final类
特别说明
本文章是个人整理的学习笔记,参考b站韩顺平老师的课程(【零基础 快速学Java】韩顺平 零基础30天学会Java)。老师讲的非常好,有兴趣的可以去看一下。