一个StudentTest.java程序的执行过程
类是Java程序的基本组成单位,一个java源程序只能有一个主类,其他类都使用默认权限,主类名必须与文件名相同
class Student{}
Public class StudentTest{
Public static void main(String[] args){}
}
开始编译时,通过文件名找到主类名,把类加载到类代码区,再找到主类的主方法
在方法区的类代码区把StudentTest类加载进来,然后运行主方法Student s;
在主方法的栈空间开辟一个名为s类型为Student类型的空间(创建了一个变量存放对象的地址,4字节,还没有创建对象),在当前目录中找到Student.class来加载到类代码区
S = new Student();//左右类型必须一致!
创建学生对象,在堆中给该对象开辟属性空间,空间大小取决于每个属性的类型和大小(String 4字节,int 4字节);
再开辟方法空间,存放指向方法区的共享代码段的方法的地址;
默认初始化;
由new调用构造方法,接收对象的地址(变量s),然后对s指向的在堆中的对象属性空间进行初始化。
如果加static关键字,则会把对象存放在方法区的静态数据区,永远不会释放
s.setAge(18);
Public void setAge(student_age){
This.age = student_age;
}
调用s所指对象的setAge方法,通过堆区的对象方法区的setAge方法找到在方法区的共享代码段的setAge方法的地址,然后调用,会在栈中开辟一个setAge的方法工作空间,在该工作空间中开辟一个变量空间student_age存值18,然后把该值赋给堆区的该对象的属性空间的age属性;
赋值完毕,释放该方法在栈中的工作空间。
信息的隐藏
类中的所有属性都应该设为Private,不能让用户直接访问,必须通过方法访问,这样可以
1.避免错误数据的设定,
2.增加权限验证
3.保护数据完整性
4.隐藏一个类的实现细节
5.降低耦合性(模块和模块之间的关联程度),提高可维护性,即面向接口编程
包声明和包导入
包声明:Package tl.brother;
该源文件的中的所有字节码文件都必须放在该声明的目录下才能使用,所以需要使用打包编译来生成.class字节码文件
打包编译:Javac -d . StudentTest.java
包导入:Import tl.brother.StudentTest;
到当前目录下的tl/brother中找到StudentTest.class 加载到内存Import tl.brother.*;
在当前目录下的tl/brother中自动搜索相应的字节码文件
常用jar包及导入
常用包:
- Java.Lang :包换一些java语言的核心类,如String,Math,Integer,Excepiton,System,Thread,自动导入,提供常用功能
- java.awt:用于构建和管理 用户图形界面GUI
- Java.util:实用工具类
- Java.io:与输入/输出功能相关的类
- Java.net:与网络相关的操作类TCP协议(socket)UDP协议 (datagrampackage)
常用的javadoc标记
@author:作者
@version:版本
@docroot:
@param:参数
Javadoc XXX.java:用于收集公有的/**/的注释
Javadoc -private XXX.java :用于收集私有的/**/的注释
Javadoc -author - version:收集@author,@version 的注释
。。。