包
包的定义与使用
专门用来存放类的,通常功能相同的类存放在相同的包中。包的声明只能位于Java源文件的第一行
Java语言中的常用包
java.lang:包含Java语言的核心类,如String、Math、System和Thread类等,使用这个包中的类无须使用import语句导入,系统会自动导入这个包下的所有类。java.util:包含Java中大量工具类、集合类等,例如Arrays、List、Set等。
java.net:包含Java网络编程相关的类和接口。
java.io:包含了Java输入、输出有关的类和接口。
java.awt:包含用于构建图形界面(GUI)的相关类和接口。
java.lang:包含一些Java语言的核心类,如String、Math、System和Thread,提供常用功能
给Java应用打包
安全、节省空间、可移植性访问控制
private(类访问级别)、default(包访问级别)、protected(子类访问级别)和public(公共访问级别)从小到大
private(类访问级别) :如果类的成员被private访问控制符来修饰,则这个成员只能被该类的其它成员访问,其它类无法直接访问,实现类的良好封装
default(包访问级别) :如果一个类或者类的成员不使用任何访问控制符修饰,则称它为默认访问控制级别,这个类或者类的成员只能被本包中的其它类访问
protected(子类访问级别) :如果一个类的成员被protected访问控制符修饰,那么这个成员既能被同一包下的其它类访问,也能被不同包下该类的子类访问
public(公共访问级别) :这是一个最宽松的访问控制级别,如果一个类或者类的成员被public访问控制符修饰,那么这个类或者类的成员能被所有的类访问,不管访问类与被访问类是否在同一个包中
用public修饰的类成员(包括字段和方法)称为公有的,公有成员允许Java系统中所有的类访问,外界可以直接存取公有数据,调用公有方法。
用private修饰的类成员称为私有的,类的私有成员只能被这个类的方法直接访问。
用protected修饰的类成员称为被保护的。类的被保护成员允许其子类继承。如果一个类有派生子类,为了使子类能够直接继承父类的成员,则把这些成员(大部分是数据)说明为被保护的。
如果类成员前面没有任何关键字修饰,则称为默认的。默认的类成员除了允许被其归属的类访问外,还允许同一个包中的其他类访问。
内存机制
栈
1.存放局部变量2.不可以被多个线程共享
3.空间连续,速度快
堆
1.存放对象2.可以被多个线程共享
3.空间不连续,速度慢,但是灵活
方法区
1.存放类的信息:代码、静态变量、字符串常量等等2.可以被多个线程共享
3.空间不连续,速度慢,但是灵活
程序执行过程内存分析
新建对象时,引用类型的数据都是null,基本数据类型 int是0,string是null,boolean是false(默认初始化)方法:参数传递的值是 值传递。
局部变量 必须初始化,成员变量会被系统默认初始化。
栈:自动分配连续的空间,后进先出,一般用来放置局部变量,数据使用完毕之后,会自动释放
堆:不连续,用来放置 new出来的对象,堆中的数据都会有默认初始化值。引用类型的数据都是null,基本数据类型 int是0,string是null,boolean是false。
方法区:属于堆的一部分,存放类的信息(代码)、static变量、常量池(字符串常量)等
解析
1、主函数中定义一个 int x=3;主函数加载时,主函数就在内存中的栈中 开辟一个空间,此空间中就会定义一个变量,并且赋值为3
2、主函数中创建一个 int[] x=new int[3];
左边 int[] x,在栈内存中定义了一个变量 x
new int[3],在堆内存中开辟了一个空间,每个在堆内存中存在的数据都会有一个地址值。
= 时,就将x的引用指向了new 对象在堆内存中的地址值。
JAVA语言中除基本类型之外的变量类型,都称之为引用类型。
JAVA中对象是通过引用reference对其操作的。
操作对象就是操作地址。
垃圾回收机制Garbage Collection
对象无人使用了,就变成了垃圾。对象空间的分配:使用new关键字创建对象即可
对象空间的释放:将对象赋值null即可,垃圾回收器将负责回收所有“不可达”对象的内存空间。
当一个对象在内存中被释放时,它的finalize()方法会被自动调用
要点
程序员无权调用垃圾回收器程序员可以通过System.gc()方法。通知GC运行,但是jAVA规范并不能保证立刻运行。
finalize方法,是JAVA提供给程序员用来释放对象或资源的方法,但是尽量少用