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