java基础学习日志07

今天小冷,但阳光依旧

今天学的是类的生命周期和main的调用

public class ClassAndMathodDemo {
//	成员变量,也叫全局变量,包括静态成员变量以及非静态成员变量
	int age;
	String name;
//	静态变量
	static String schoolName;
//	代码段就是用{}包围的代码,从作用域划分分为两种,一种是全局代码段,一种是局部代码段
//	全局代码段,在类里面,方法体外面的叫全局代码段,课划分为两种,一种静态全局代码段,一种非静态全局代码段
	{
		System.out.println("age value is"+age);
	}
	static{
		System.out.println("schoolName vlaue is"+schoolName);
	} 
	
//	方法也主要分为两种,一种是静态方法,一种是非静态方法
	public static void run(){
		System.out.println("this is runing");
	}
	
	public void sleep(){
		System.out.println("this is sleeping");
	}
}

生命周期这词用得好啊,还有垃圾清理。静态就是在堆中开辟出一块独立的存储空间,单独调用

/**
 * 这个类主要是演示类的生命周期中的准备阶段和初始化阶段
 * @author jh
 *在java中,静态的成员变量和方法可以直接通过类名来调用
 */
/*
 * 用class修饰的,叫类,一个java文件中可以有多个类,
 * 但是只能有一个public,而且用public修饰的类名要和文件名保持一致,
 * 一个java文件中可以有多个类,通过javac编译后会有对应个数的class文件
 */
class StaticCode {
    private static int a = 1;		//静态成员变量
    static {
        System.out.println("StaticCode is loading"); // 只执行一次
    }
    public static void show() {
        a++;
        System.out.println("a = " + a);
    }
}

public class SampleStaticInit {
    public static void main(String[] args) {
        StaticCode.show();
        StaticCode.show();
        StaticCode.show();
    }
}
类,在我眼中就是集合,类的元素就是集合元素,加载就和人脑写读记忆差不多,初始化和实例化就是定义和参照物
/**
 * 该类主要是介绍类的加载,初始化,实例化的顺序
 * 首先是加载,在加载阶段会给静态成员(变量,方法)分配内存空间,并赋予默认值
 * 然后在初始化阶段给静态成员赋予正确的初始值,在初始化后,就可以直接通过类名来调用静态的成员
 * 最后是实例化,实例化是给非静态的成员开辟内存空间,赋予相应的默认值。
 * 实例化过程(重点):1.在堆中为实例变量分配内存空间。
 * 			2.调用类中所有的实例代码块。{……}
 *			3.调用相应的构造方法。 
 * 实例后就可以直接通过对象名直接调用静态和非静态的成员
 * @author ah
 *
 */
public class StudentDemo {
//	静态成员在加载时就分配内存,并赋予默认值,(默认值,如果是数字类型都是0或0.0;char是'',boolean 是false,
//	其他类型同一是 null).
//	静态成员在初始化阶段会赋予正确的默认值,比如schoolName在加载阶段的默认值是null,
//	在初始化阶段,才会将"郑大"赋给scoolName;
	static String schoolName ="郑大";	
	static int number;
	static boolean isman;
//	非静态成员是在实例化阶段开辟控制并赋值(在实例时,如果非静态成员没值则赋予默认值)
	int age;
	String name="tom";
//	静态代码段会在初始化阶段执行
	static{
		System.out.println(number);
		System.out.println("schoolName is "+schoolName);
	}
//	非静态代码段会在实例化阶段执行
	{
		System.out.println("this is code");
	} 
//	构造方法会在实例化阶段最后执行
	public StudentDemo() {
		// TODO Auto-generated constructor stub
		System.out.println("这是studentDemo的构造方法");
	}
	public void run(){
		System.out.println("this is runing");
	}
}


反射机制,后面会学,关于加载,初始化,实例的顺序,目前只要会new就好



import com.hisoft.exercise_daily.test1;

public class InstanceDemo {
	public static void main(String[] args) {
//		实例化的第一种方式,加载、初始化、实例化三个操作都会执行
		StudentDemo stu = new StudentDemo();
		stu.run();
		texi1.main("2");
//		实例化的第二种方式,通过java的反射机制进行
//		try {
////			通过反射机制中Class的forName进行加载,和初始化
//			Class c = Class.forName("com.hisoft.java.cycle.StudentDemo");	
//			//通过Class类里面的newInstance()方法来进行实例化
//			StudentDemo stu1 = (StudentDemo) c.newInstance();	
//			stu1.run();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
		
//		实例化的第三种操作,首先通过ClassLoader类的loadClass方法加载
//		try {
////			通过ClassLoader类的loadClass方法加载对应的类
//			Class c=ClassLoader.getSystemClassLoader().loadClass("com.hisoft.java.cycle.StudentDemo");	//加载
////			通过Class的newInstance();进行初始化和实例化
//			StudentDemo stu2=(StudentDemo)c.newInstance();
//			stu2.run();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}

	}
}






你可能感兴趣的:(java基础学习日志07)