值和引用的传递与初始化块

本文详细介绍了Java和C++中基本类型数据的值传递方式,强调了对象的地址引用以及构造方法、静态块和初始化块的作用。通过示例展示了如何在change1、change2和change3函数中影响对象值的变化。
摘要由CSDN通过智能技术生成

值:1.基本类型数据;2.对象的地址
引用:传句柄的地址
在java中只有按值传递没有按引用传递,c语言也只有按值传递,只有c++才有引用传递。
块:
静态块>块>构造方法

package com;

public class Person {
    private String name;
    int age;
    //实际输出的时候先输出初始化块里的内容,而静态代码块的优先级比普通代码块更高,类没有使用的时候在硬盘中,第一次new此类对象会将类加载进内存中,
  //    其中静态的最先加载进静态常量池,而且静态初始化块只在第一次创建对象的时候执行,如果有继承的话,父类的先执行;
    public Person(){
        System.out.println("构造方法1");
    }

    {
        System.out.println("初始化块1");
    }
    static
    {
        System.out.println("静态初始化块1");
    }
    private static Person x=new Person();
    
    static
    {
        System.out.println("静态初始化块2");
    }
//    private private static int[] arr= {1,2,3}; //field是属性,constructor构造器   method方法  这三种组成一个类,说全一点其实应该还有注解信息@
//    public int getAge() {
//        return age;
//    }
//    public void setAge(int n) {
//        age=n;
//    }
//    public String getName() {
//        return name;
//    }
//    public void setName(String n) {
//        name=n;
//    }
//    public int[] getArr() {
//        return arr;
//    }
//    public int[] getArr2() {
//        int[] arrNew=new int[arr.length];
//        for(int i=0;i<arr.length;i++) {
//            arrNew[i]=arr[i];
//        }
//        return arrNew;
//    }
//    public static int[] getArr3() {
//        int[] arrNew=new int[arr.length];
//        for(int i=0;i<arr.length;i++) {
//            arrNew[i]=arr[i];
//        }
//        return arrNew;
//    }
    public String toString() { //非静态方法,必须依托对象存在。
        return "age:"+age+"name:"+name;//如果不定义此方法返回对象类型和类地址
    }
}

值的引用和传递

package com;

public class Test13 {
    public static void main(String[] args) {
//        int a=10;
//        int b=20;
//        Person x1=new Person();
//        Person x2=new Person();
//        x1.age=11;
//        x2.age=12;
//        change1(a,b);
//        change2(x1,x2);
//        System.out.println(a);
//        System.out.println(x1.age);
//        change3(x1,x2);
//        System.out.println(x1.age);//只有change3会让对象的值改变
        
        Person x3=new Person();
        System.out.println("==========");
//        System.out.println(x3);
        System.out.println("===========");
        Person x4=new Person();
//        System.out.println(x4);

    }
    //详见视频:值和引用传递
    public static void change1(int x1,int x2) {
        int x3=x1;
        x1=x2;
        x2=x3;
    }
    public static void change2(Person x1,Person x2) {
        Person x3=x1;
        x1=x2;
        x2=x3;
        x1.age=1000;
    }
    public static void change3(Person x1,Person x2) {
        int x3=x1.age;
        x1.age=x2.age;
        x2.age=x3;
    }
    
    
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值