您的位置:首页 > 编程语言 > Java开发

java基础学习日志07

2017-12-26 13:57 260 查看
今天小冷,但阳光依旧

今天学的是类的生命周期和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();
//		}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: