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

值: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
//            arrNew[i]=arr[i];
//        }
//        return arrNew;
//    }
//    public static int[] getArr3() {
//        int[] arrNew=new int[arr.length];
//        for(int i=0;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;
    }
    
    
}

你可能感兴趣的:(java,java,算法,数据结构)