Java基础----Java包、Java类、Java虚拟机加载类的步骤总结----含思维导图

一、Java包

1、包命名规范

   全小写,有多个单词中间用.隔开,最好以所在公司或单位的网站倒叙来写:例如:com.baidu.demo。

2、Java中包的实质

  (1) Java中的包(Package)其实指的就是目录。Java工程中的文件都是放在各个包中的。
  (2) 使用包可以更好地管理工程中的文件(类、接口、图片等等)。
  (3) 不同包下的文件可以重名,包也可以被另一个Java包所使用。
  (4) package语句是Java源文件的第一条语句。如果没有package语句,则为缺省无名包。(不推荐使用)例如:直接在src下面新建一个类:class。
  (5) 如果文件不是放在默认包下,需要在最前面用package关键字声明该类所属的包。例:package sample.test;
  (6) 如果要引用其他包中的类,则需要通过import关键字对所引用的类进行引入。
  (7) * :代表通配符,表示该报下的所有类(不推荐)例如:import com.hisoft.java.*;
注意: 一个java文件中可以申明多个类:class,但是只有和类文件名一致的类才能用public进行修饰。但是不建议一个文件中声明多个类:class。

3、Java中常用的包

  3.1、常用包
    (1)java.lang——包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
    (2)java.util——包含一些实用工具类,如定义系统特性、使用与日期日历相关的方法。
    (3)java.io——包含能提供多种输入/输出功能的类。
    (4)java.sql——提供使用Java编程语言访问并处理存储在数据库中的数据的API。
  3.2、非常用包
    (1)jjava.net——包含执行与网络相关的操作的类。
    (2)jajava.awt——包含用于创建用户界面和绘制图形图像的所有类。这些类被用来构建和管理应用程序的图形用户界面(GUI)。
    (3)javax.swing——提供一组“轻量级”(全部是Java语言)组件。这些swing组件是对AWT组件的改进。
注意: 1:在同一类中不能导入不同包下面的与此类是相同类名的类;
    2:同一包中,不同class.java文件中的类名称不可以相同,因为类的全名是:包.类名。

二、Java类

1、类声明语法

   [类修饰符] class 类名
      [extends 超类名]
      [implements 接口名] {
     成员变量定义;
   方法定义;
   }

2、类的生命周期

   Java基础----Java包、Java类、Java虚拟机加载类的步骤总结----含思维导图_第1张图片

3、静态成员(类变量)

  (1)用static修饰的全局变量或者方法、代码块。
  (2)在main方法中可以通过 类名.静态成员进行赋值访问。

4、实例变量(实例成员变量)

  (1)没有用static修饰的全局变量被称为实例变量。包括:实例变量;实例代码段;实例方法。值访问。
  (2) 只能通过实例对象进行调用。

5、代码段

  (1)静态代码段:用static修饰 { } 的代码段。
  (2)实例代码块:在方法外用{}括起来的代码。

6、Java虚拟机加载类的步骤

  (1) 加载:找到相应的class字节码文件,由类加载器将类的信息读入到Java虚拟机中。如果找不到该类,则会抛出ClassNotFoundExcetpion异常。
  (2) 验证:确认读取文件类型的正确性,即class是否符合Java规范并且不会损害Java虚拟机的完整性。
  (3) 准备:为静态成员变量分配内存同时设置默认初始值。
  (4) 解析:把符号引用转为直接引用的过程。例如将变量名转为内存地址。以后使用这个成员变量时,就直接去这个内存地址去找了。同时类的成员方法也会被映射到某个内存地址以待调用。
  (5) 类的初始化例:此阶段会为静态成员变量赋予正确的初始值,并且调用类中所有的静态代码块。 注意:初始化阶段只会进行一次。
  (6) 对象实例化:
    ① 为实例变量分配内存。
    ② 调用类中的所有实例代码块。
    ③ 调用相应的构造方法。
  (7) 垃圾收集:
    ① 对象实例化后就会在堆内存中为对象分配空间,当对象不再使用的时候,Java就会通过垃圾回收机制将对象销毁回收内存
    ② 垃圾回收线程平时是处于睡眠状态的,当内存不够分配时该线程就会被唤醒,按照特定的垃圾收集算法找出内存中的垃圾并回收。
    ③ Java把内存分为:新生代、老年代、持久代。新生代和老年代又被称为堆内存。垃圾回收主要就是针对堆内存进行的。
    ④ 垃圾回收有2种方式:minor gc(快速GC)和full gc(全局GC)。快速GC是在新生代中进行垃圾回收。
    ⑤ 当经过垃圾回收之后还是不能给对象分配内存空间,则会抛出OutOfMemoryError。
    ⑥ 通过system.gc呼叫GC。
  (8) 对象终结:此对象从内存彻底消失。
注意: Java在需要使用类的时候,才会将类加载。如果只是定义一个变量为XXX类型,则不会加载类。

三、类的实例化

  1、在堆中为实例变量分配内存空间并且赋值。
  2、调用类中所有的实例代码块:{……}。
  3、调用相应的构造方法。
  4、具体实现:
   (1)编译阶段Java编译器会把类中所有的实例变量初始化代码和实例代码块封装到一个方法中去,此时JVM会调用这个方法。
   (2)方法程序员不能调用,只能被JVM调用。
   (3)方法在每次实例化时都会被执行。实例代码块按源文件顺序执行,最后才执行构造方法。

  5、实质:类名 对象名 = new 类名();实质是:类名 对象名 = new 构造方法();也就是说,实例化对象时实质就是new 构造方法();

四、类的初始化和实例化的三种方式

  1、加载,初始化,实例化一起进行:例:new 类名(); Animal ani = new Animal();
  2、反射:使用Class类的forName方法,Class.forName(“包名+类名”);//这一句完成:加载+初始化操作 Class对象.newInstance()//这句完成实例化操作。
  3、通过类加载器加载类(使用ClassLoader类的loadClass方法),然同通过class对象.newInstance()方法完成对象实例化操Class c=ClassLoader.getSystemClassLoader().loadClass(“包名+类名”); // 加载 c.newInstance();// 初始化 —> 实例化
注意: 实例方法只能通过对象.方法的形式进行调用。

五、类的初始化和实例化的区别

  1、在初始化操作完成之后才进行实例化操作。
  2、初始化是为静态成员变量赋初值,是在方法区(持久代)中分配空间。实例化是为实例变量赋初值,是在堆内存中分配空间。
  3、初始化完成之后只能使用该类的静态成员(变量和方法),实例化完成之后即可以使用该类的静态成员,也可以使用该类的实例成员。
注意: 静态方法只能访问静态成员,不能调用实例成员(原因 : 静态的内容是随着类的加载而加载的,它是先进内存,初始化先于实例化进行。

六、 一个标准的类

  1、所有的成员变量都要使用private关键字修饰。
  2、为每一个成员变量编写一对Getter/Setter方法。
  3、编写一个无参的构造方法。
  4、编写一个全参的构造方法。
  5、重写toString()方法。
拓展: 一个标准的类也叫做Java Bean。

标准的student类:

package test;

class Student {
	//私有化名字
	private String name;
	//私有化年龄
	private int age;
	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return age;
	}
	//无参构造方法
    public Student() {
    	
    }
    //全参构造方法
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
    //重写toString()方法
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
}
七、 思维导图

Java基础----Java包、Java类、Java虚拟机加载类的步骤总结----含思维导图_第2张图片

你可能感兴趣的:(Java学习历程)