/**
封裝性
*/
public class Test1 {
public static void main(String[] args) {
//沒有封裝
Person p1 = new Person();
p1.name="xu";
p1.age=18;
//封裝
Pet cat = new Pet();
cat.setAge(2);
cat.setName("miaomiao");
}
}
//沒有封裝(在類外部創(chuàng)建對象后直接訪問屬性(隨意修改屬性))
class Person{
String name;
int age;
}
//封裝后(加private關(guān)鍵字悦昵,訪問權(quán)限修飾符肴茄;私有的屬性或方法,只能在本類中訪問抗楔。public 公有的屬性和方法可以被類外部的其他類訪問
// 。訪問私有屬性使用Getter Setter方法
// 一般寫屬性都會封裝)
class Pet{
private String name;
private int age;
//對外提供訪問私有屬性的方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
image.png
/**
構(gòu)造方法:構(gòu)造方法是在類中定義的,構(gòu)造方法的定義格式:方法名稱與類名稱相同骄噪,無返回值類型的聲明示弓。
1.構(gòu)造方法就是類構(gòu)造對象時調(diào)用的方法,用于對象的初始化工作
2.構(gòu)造方法是實例化一個類的對象時奏属,也就是new的時候最先調(diào)用的方法跨跨。
*/
public class Test1 {
public static void main(String[] args) {
Person p = new Person();//調(diào)用無參構(gòu)造方法
Person p1 = new Person("xu", 18);//調(diào)用有參構(gòu)造方法
Pet cat = new Pet(3,"huahua");//在構(gòu)造方法中調(diào)用另一個構(gòu)造方法
}
}
class Person{
//默認構(gòu)造方法,可不顯示(如果有有參構(gòu)造方法還想用無參構(gòu)造方法嘱腥,必須將無參構(gòu)造顯示)
public Person() {
System.out.println("構(gòu)造方法執(zhí)行了");
}
public Person(String name,int age) {
this.name=name;
this.age=age;
System.out.println("有參構(gòu)造方法執(zhí)行了");
}
private String name;
private int age;
}
//在構(gòu)造方法中調(diào)用另一個構(gòu)造方法
class Pet{
private int age;
private String name;
public Pet() {}
public Pet(int age) {
this.age = age;
System.out.println("一個參數(shù)的構(gòu)造方法執(zhí)行了");
}
public Pet(int age, String name) {
this(age);//調(diào)用一個參數(shù)的構(gòu)造方法(必須在第一句)
this.name = name;
System.out.println("兩個參數(shù)的構(gòu)造方法執(zhí)行了");
}
}
/**
this:
1.調(diào)用類中的屬性
2.調(diào)用類中的方法或構(gòu)造方法
3.表示當(dāng)前對象
4.類名.this(內(nèi)部類中會使用)
*/
public class Test1 {
public static void main(String[] args) {
Cat c = new Cat();
c.setAge(3);
c.setName("huahua");
Cat c1 = new Cat();
c1.setName("sansan");
c1.eat();
}
}
class Cat{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//this代表調(diào)用setName方法的對象耕渴,這里是c
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat(){
//在方法中使用this調(diào)用類中的其他方法或?qū)傩裕瑃his可以省略
System.out.println("我是"+this.getName()+",我愛吃魚");//this代表調(diào)用eat方法的對象齿兔,這里是c1
}
}
/**
值傳遞(基本數(shù)據(jù)類型都是)
*/
public class Test1 {
public static void main(String[] args) {
int x=10;
method(x);
System.out.println("x="+x);
}
public static void method(int mx){
mx=20;
}
}
//輸出結(jié)果為x=10
image.png
/**
引用傳遞
*/
public class Test1 {
public static void main(String[] args) {
Duck d = new Duck();
method(d);
System.out.println("Duck age="+d.age);
}
public static void method(Duck duck){
duck.age=20;
}
}
class Duck{
int age=2;//省略封裝
}
//結(jié)果是Duck age=20
image.png
/**
String傳遞
字符串本身就是一個對象
*/
public class Test1 {
public static void main(String[] args) {
String name="xu";
method(name);
System.out.println("name="+name);
}
public static void method(String sname){
sname="zhang";
}
}
//結(jié)果是name=xu
image.png
/**
String傳遞2
*/
public class Test1 {
public static void main(String[] args) {
Person p = new Person();
method(p);
System.out.println("person name="+p.name);
}
public static void method(Person per){
per.name="xu";
}
}
class Person{
String name="zhang";//省略封裝
}
//輸出person name=xu