值: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;
}
}