方法 , 类深度分析
方法重载

什么是方法重载,方法重载有什么要求;方法重载必须是在同一个类中,方法名必须相同,参数列表必须互不相同,这种自动匹配对应的方法执行机制就叫方法重载

void meth(int ... vars)和 void meth(String ... vars)属于方法重载,但是当我们调用meth()方法的时候编译器会报错,原因是对meth方法的引用不明确,这里需要注意

方法传参

基本类型:传数值副本,改参不改原;

引用类型:传地址副本;改堆里对象内容生效,换地址不生效;

public static void main(String[] args) { int a=2; int [] arr =new int[2]; add(a); add1(arr); add2(arr); System.out.println(a);//2 System.out.println(arr);//[I@b4c966a System.out.println(arr[0]);//30 } public static void add(int i) { i=10;//修改的是拷贝的数值副本 } public static void add1(int[] i) { i=new int[3];//修改的是拷贝的地址副本 } public static void add2(int[] i) { i[0]=30;//修改的是拷贝地址副本指向的真实地址的值 } --------------------------------------------------- //上面理解不了的可以先看看下面的代码 int b =666; int t=b; t=10; System.out.println(b);//666 int[] arr1 =new int[2]; int[] arr2 =arr1; arr2=new int[3]; System.out.println(arr1);//[I@2f4d3709 int[] arr3 =new int[2]; int[] arr4 =arr3; arr4[0]=888; System.out.println(arr3[0]);//888 /** * 基本数据类型 变量b对应什么,引用类型变量arr2对应什么 思考 * 实际上当我们将一个变量(实参)传给方法时,我们可以用sout打印一下,打印语句输出的是什么我们传递的就是个什么东西 * 当我们传递基本数据类型的时候meth(a),传递的是变量a中保存的值2 * 当我们传递引用类型的时候meth(arr),传递的是变量arr中保存的值[I@2f4d3709 * 操作传递的2字面量本身没有特别的意义,操作传递arr变量中保存的地址也没有意义,操作传递arr变量中保存的地址指向的数据才有意义 */

Java 永远只有值传递,不存在引用传递

关键字static

static属于类本身,不属于任何对象实例,static修饰的在类加载时就初始化,优先于一切对象存在,全局唯一,所有对象共享一份静态资源

修饰成员变量: 类加载阶段就初始化,早于new对象,生命周期是随类一起加载,程序结束才销毁

修饰方法: 被修饰的方法中不能出现this,super等关键字,静态方法只能访问静态成员和静态方法,而且静态方法不能被重写(Override)

修饰代码块: 类加载时执行唯一一次

修饰内部类: 内部类不依赖外部实例,可直接 外部类.静态内部类 创建

关键字final

final代表(不可修改,不可变更),可以修饰变量,方法,类三类元素,每一类约束完全不同

修饰普通局部变量: 只能赋值一次,一旦赋值就不能修改

修饰成员变量: 必须保证在对象创建完毕前完成唯一一次赋值

修饰静态成员变量: 类加载是就要赋值,只能赋值一次

修饰形参: 方法内部不允许重新给形参赋值

修饰方法: 该方法不能被重写

修饰: 该类不能被继承,没有任何的子类