HelloWorld解析
方法区
栈(方法执行的工作空间)
堆(存对象)
public class HelloWorld{
//static:通过类找到此main方法并调用
//public:使得JVM能找到并使用此main方法
//void: JVM不需要返回值
public static void main(String[]args){
//定义一个String类型局部变量变量名为s String s;
s=”HelloWorld”;
//这里调用System.out(输出流)的println()时会自动调用已经覆写了的toString(),所以输出的结果不是对象的地址而是对象的值。 System.out.println(”ssaid:”+s);
}
}
文字解析HelloWorld1.
五个文件:一个源文件(HelloWorld.java),四个字节码文件(HelloWorld.class, String[].class , String.class , System.class)
2. 五个对象:一个字符串数组对象(args),一个常对象(s),三个流对象(System.in, System.out , System.error)
3. 三个方法:main(), println() , toString()
4. 零个属性:类中没有定义变量
5. 两个局部变量:args, s
6. 说明:字符串数组String[] ,堆中有的是空数组对象,new String[0]中有对象但是没有值。
GC作用于堆。
代码区包括类代码和共享代码,数据区包括静态数据区也叫常量池和缓冲数据区(包括整型Integer -128~+127 ,字符串对象)
栈中的方法执行空间包括断点调试,临时变量,数据局部变量等等。
主类是编译器的入口,main方法是JVM的入口。
C语言的缺点:内存需要自己去管理,变量不赋值会导致系统崩溃,指针太麻烦;优点是效率高。
Java以牺牲效率为代价来提高安全性,自动释放内存。静态的继承编译时知道,动态的继承执行时才知道。
Java是先编译再解释。JVM的上层模块相同,下层与系统相接的地方不同。
JVM(虚拟机)的个数与系统的个数相同。这就是一次编写到处运行的原因。JVM是相同的,然后将.Class文件解释为相应的机器指令。
在编译与解释中,.java与.class文件都不会变化,JVM是变化的。
Java源代码与字节码与机器无关,JVM与机器有关。
GC:垃圾回收机制,优点是更好的回收使用内存,缺点是效率不高。
内存泄漏是指内存使用不当导致系统崩溃。Java的GC机制只能适当的改善问题,不能避免内存泄漏问题。
环境变量配置的原因:
Path:……bin,找到javajavac等命令
Classpath:……lib,找到标准库中的类(不能省略)
JAVA_HOME:针对tomcat配置的,确定jdk的位置。
Java中一般只有一个主类是公有,其他的类都是默认的。
JVM是由硬件和软件模拟的计算机。
方法区分为代码区和数据区。堆中一般存放对象,对象都有属性和方法(一般都有四个字节)栈中主要包括形参,局部变量,断点,堆空间的地址,方法区空间的地址以及临时数据。
实例方法通过对象调用除了常对象在方法区的常数据区中开辟空间,其他的对象都在堆中开辟空间。
String与String[]是两个不同的类