局部变量和成员变量
写在类中的叫成员变量,写在方法中的是成员变量
区别:
定义位置不同
作用域不同
默认值不同
成员变量有默认值
局部变量没有默认值,未赋值不能使用
内存位置不同
成员变量跟随对象进入堆内存
局部变量跟随方法进入堆内存
生命周期不同
成员变量跟随对象,内存等待JVM清理
局部变量跟随方法,方法出栈,变量被清理
方法参数是基本数据类型和引用数据类型
方法参数是基本数据类型
// 视频9_10讲解
public class Car {
public static void main(String[] args) {
int a = 1;
function(a); // 函数执行完后函数中变量a已经被回收,并没有改变main函数中的a
System.out.println(a); // 输出1
}
public static void function(int a) {
a += 5;
}
}
方法参数是引用数据类型
Person类
package cn.itcast.demo02;
public class Person {
int age = 18;
}
main函数
package cn.itcast.demo02;
public class PersonTest {
public static void main(String[] args) {
Person P = new Person();
System.out.println(P.age); // 输出18
// 变量P指向对象P的内存空间
function(P);
System.out.println(P.age); // 输出20
}
public static void function(Person A) {
// 变量A指向对象P的内存空间
A.age = 20;
}
}
注:函数中传引用数据类型实际传的是内存地址,会导致数据改变,比如传数组和对象
封装
封装的表现
1.方法就是基本的封装体
2.类其实也是封装体
封装的好处
1.提高了代码的复用性
2.隐藏细节,便于调用
3.提高了安全性
private关键字
被private修饰的成员,只能在自己本类使用,不能在外类使用
可以在本类使用
package cn.itcast.demo02;
public class Person {
int age = 18;
private String gender = "man";
public static void main(String[] args) {
Person P = new Person();
System.out.println(P.age);
System.out.println(P.gender); // 可以使用,输出"man"
}
}
不能在外类使用
package cn.itcast.demo02;
public class PersonTest {
public static void main(String[] args) {
Person P = new Person();
System.out.println(P.age);
System.out.println(P.man); // 无法访问,报错
}
}
给私有方法提供对外接口
Person类
package cn.itcast.demo03;
public class Person {
private int age;
private String gender;
public void setAge(int age) {
this.age = age; // 重名,使用this关键字
}
public void setGender(String a) {
gender = a; // 没有重名,可以不用this关键字
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
public void speak() {
System.out.println(age);
System.out.println(gender);
}
}
PersonTest类
package cn.itcast.demo03;
public class PersonTest {
public static void main(String[] args) {
Person P = new Person();
P.setAge(23);
P.setGender("man");
System.out.println(P.getAge());
System.out.println(P.getGender());
P.speak();
}
}
小结:类中不需要对外提供的属性都私有化,包括属性和方法
并提供set和get方法对其进行访问
注意:私有仅仅是对封装的体现而已
this 关键字
方法中的局部变量名如果和成员变量重名,该变量是局部变量。
如果方法中没有定义,则使用方法名。
注意:this表示本类对象,this关键字可以解决重名问题。相当于python中的self。
继承
// 格式
public class SmallCat extends Cat{}