网站建设创意,教育网站建设市场分析计划书,大同住房和城乡和建设网站,乐东黎族自治县住房建设局网站书接上回
类与对象
static关键字
static的作用#xff1a;
修饰一个属性#xff1a;声明为static的变量实质上就是一个全局变量,其生命周期为从类被加载开始一直到程序结束#xff1b;修饰方法#xff1a;无须本类的对象也可以调用该方法#xff1b;修饰一个类#x…书接上回
类与对象
static关键字
static的作用
修饰一个属性声明为static的变量实质上就是一个全局变量,其生命周期为从类被加载开始一直到程序结束修饰方法无须本类的对象也可以调用该方法修饰一个类该类必须是内部类后说 静态类与变量通过类名直接调用类名.静态变量/静态方法。注意非静态方法中可以调用静态的变量和方法而静态方法中只能调用静态的变量和方法不能调用非静态的变量和方法。
public class Test{public static void main(String[] args) {House h;//声明一个类的变量h new House();//创建实例对象h.kind 别墅;h.Print();//非静态方法的调用需要有h这个对象House.Smile();//静态类直接调用System.out.println(House.Count);//变量的调用也一样}
}
public class House{String kind 未知;static int Count 3;public void Ptint(){System.out.println(kind Count 栋);}public static void Smile(){System.out.println(哈哈被骗了);}
}静态方法限制
仅能调用其他static方法只能访问static数据不能以任何方式引用this和super 因为static的限制所以我们再定义他的时候最好确定之后他是否是所有对象共同的属性或方法在将其定义为静态。
值传递与引用传递
有一道非常经典的面试题目 public class Test {public static void main(String[] args) {Integer a 1;Integer b 2;System.out.println(a 和 b 的原始的值a b);swap(a,b);System.out.println(a 和 b 的现在的值a b);}private static void swap(Integer a, Integer b) {// 交换a与b的值}实现变量的交换非常简单前面已经学习过了三种交换方法直接带入最简单的 private static void swap(Integer a, Integer b) {// 交换a与b的值int c;c a;a b;b c;}完成后最后的结果却是错的这是因为程序中只交换了形参的值而实参却没有丝毫变化。 形参 就是形式参数用于定义方法的时候使用的参数是用来接收调用者传递的参数的。 形参只有在方法被调用的时候虚拟机才会分配内存单元在方法调用结束之后便会释放所分配的内存单元。 因此,形参只在方法内部有效所以针对引用对象的改动也无法影响到方法外。 实参 就是实际参数用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。 在本例中 swap 方法中的a, b 就是形参传递给 swap 方法的 a,b 就是实参。 值传递:只能把实参传递给形参而不能把形参的值反向作用到实参上。在函数调用过程中形参的值发生改变而实参的值不会发生改变。 在上题中实际内存情况 引用传递:是将实参引用的地址传递给了形参所以任何发生在形参上的改变也会发生在实参变量上。 在第一个程序中h.kind 别墅;这就是引用传递
内存结构 .class:java程序编译后产生的编译文件 类加载器加载.class文件 方法区各个线程共享的内存区域它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 栈内存 在栈内存中保存的是堆内存空间的访问地址或者说栈中的变量指向堆内存中的变量Java中的指针 堆内存堆内存用来存放由new创建的对象实例和数组 本地方法栈存储本地方法比如c语言栈。 程序计数器可以看做是当前线程所执行的字节码的行号指示器分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖这个计数器来完成。
代码块
用大括号裹起来的代码
普通代码块在方法中的写的代码块构造块在类中定义的代码块在创造对象时被调用优于构造方法静态代码块在类中是使用static声明的代码块在第一次被调用创建对象时被调用只会执行一次优于构造块同步代码块多线行程中介绍
public class Test{public static void main(String[] args) {House h1 new House();House h2 new House();House h null;}
}
public class House{public House(){System.out.println(构造方法/n--------------);}{System.out.println(构造块House/n---------);}public static void Smile(){{String info 普通代码块smile/n-----------;System.out.println(info); }}static {String info 静态代码块smile/n-----------;}
}