Java面向对象-引用传递

一、引用传递

【案例-1】

Java面向对象-引用传递_第1张图片
引用传递-1.png
代码
class Ref1{
    int temp = 10;
}
public class Demo08 {
    public static void main(String[] args) {
        Ref1 r1 = new Ref1();
        r1.temp = 20;
        System.out.println(r1.temp);
        tell(r1);
        System.out.println(r1.temp);
    }
    public static void tell(Ref1 r2) {
        r2.temp = 30;
    }
}
结果:
20
30

【案例-2】

Java面向对象-引用传递_第2张图片
引用传递-2.png
代码
public class Demo09 {
    public static void main(String[] args) {
        String str1 = "hello";
        System.out.println(str1);
        tell(str1);
        System.out.println(str1);
    }
    public static void tell(String str2) {
        str2 = "jike";
    }
    
}
结果:
hello
hello

【案例-3】

Java面向对象-引用传递_第3张图片
引用传递-3.png
代码
class Ref2{
    String temp = "hello";
}
public class Demo10 {
    public static void main(String[] args) {
        Ref2 r1 = new Ref2();
        r1.temp = "jike";
        System.out.println(r1.temp);
        tell(r1);
        System.out.println(r1.temp);
    }
    public static void tell(Ref2 r2) {
        r2.temp = "xueyuan";
    }
}
结果:
jike
xueyuan

二、this关键字

使用
  • 表示类中的属性和调用方法。
  • 调用本类中的构造方法。
  • 表示当前对象。
代码一
class People{
    private String name;
    private int age;
    
    public People(String name,int age){
        this();//通过this调用构造方法,必须方法构造方法的首行
    
        //通过this调用本类中的属性
        this.name = name;
        this.age = age;
    }
    
    //无论什么情况下都要执行此方法
    //需要在其他构造方法中调用此方法
    public People(){
        System.out.println("无参数构造方法");
    }
    
    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;
    }
    public void tell() {
        //通过this调用当前类中的方法
        System.out.println("姓名:"+this.getName()+"  "+"年龄:"+this.getAge());
    }
}
public class Demo11 {
    public static void main(String[] args) {
        People p = new People("张三", 30);
        p.tell();
    }
}
结果:
无参数构造方法
姓名:张三  年龄:30

代码二

package cn.sec.ch02;
class People1{
    public void tell() {
        System.out.println(this);
    }
}
public class Demo12 {
    public static void main(String[] args) {
        People1 p1 = new People1();
        System.out.println(p1);
        p1.tell();
        //通过People1实例化的对象和this得到的对象是一个对象
        //通过this可以表示当前对象
    }
}
结果:
cn.sec.ch02.People1@7852e922
cn.sec.ch02.People1@7852e922

三、static关键字

  • 使用static声明属性:static声明全局属性
  • 使用static声明方法:直接通过类名调用
  • 注意点:使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。
示例一
代码
class PersonA{
    String name;
    private static String country = "北京"; //声明成静态的,是大家公有的属性
    public PersonA(String name){
        this.name = name;
    }
    
    public static String getCountry() {
        return country;
    }
    public static void setCountry(String country) {
        PersonA.country = country;
    }

    public void tell() {
        System.out.println("姓名:"+name+"  出生地:"+country);
    }
}
public class Demo13 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
         PersonA.setCountry("上海");//静态的方法通过类名调用 ,可以在实例化之前调用
         PersonA pA1 = new PersonA("张三");
//       PersonA.country = "上海"; //静态的属性通过类名调用  
         pA1.tell();
         PersonA pA2 = new PersonA("李四");
//       pA2.country = "上海";
         pA2.tell();
         PersonA pA3 = new PersonA("王五");
//       pA3.country = "上海";
         pA3.tell(); 
    }
}
结果:
姓名:张三  出生地:上海
姓名:李四  出生地:上海
姓名:王五  出生地:上海
示例二
代码
public class Demo14 {
    
    private static int i = 10;
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能访问的。
        System.out.println(i);
        tell();
    }
    public static void tell() {
        
    }
}

你可能感兴趣的:(Java面向对象-引用传递)