因为java程序编译后的代码不是能被硬件系统直接运行的代码,而是一种”中间码“----字节码。然而不同硬件平台上安装有不同的Java虚拟机(Jvm),
由JVM来把字节码在“编译”成所对应的硬件平台能够执行的代码,因此对于Java编程着来说,就不用考虑硬件平台是什么,因为它有虚拟机(JVM),JAVA程序不是
直接在电脑上运行的,是在虚拟机上进行的,每个系统平台都有属于自己的虚拟机(JVM),所以Java可以跨平台。
正因为java程序运行在JVM上,所以就不经修改,就能在不同平台上的JVM访问,UNIX在UNIX中有自己的JVM虚拟机,Linux在Linux中有自己的JVM虚拟机,Windows上有自己的JVM虚拟机。
Java Virtual Machine -java 程序的运行环境(java二进制字节码的运行环境)
第一块PC寄存器:PC寄存器是用于存储每个线程下一步执行的JVM指令,如该方法为native的,则PC寄存器中不存储任何信息。
第二块JVM栈: JVM栈是线程私有的,每个线程创建的同时都会创建JVM栈,JVM栈中存放为当前线中局部基本类型的变量(java中的八种数据类型,Boolean、char、Byte、short、int、long、float、double)、部分的返回结果以及Stack Frame,非基本类型的对象在JVM栈上仅存放一个指向堆上的地址。
第三块堆(Heap): 它是JVM用来存储对象实例以及数组值的区域,可以认为Java中所用通过new创建的对象的内存都在此分配,Heap中的对象内存需要等待GC进行回收。
第四块方法区域(Method Area):
1、在Sun JDK中这块区域对应的为PermanetGeneration,又称为久代。
2、方法区域存放了所加载的类信息(名称,修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息,当开发 人员在程序中通过Class对象中的getName,isInterFace等方法来获取信息时,这些数据都来源于方法区域,同时方法区域也是全局共享的,在一定的条件下它也会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。
第五块运行时的常量池(Runtime Constant Pool):
1、存放为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。
第六块本地方法堆栈(Native Method Stacks)
1、JVM采用本地方法堆栈来支持native方法执行,此区域于存储每个native方法调用的状态。
内置数据类型:内置数据类型是java语言本身自带的八种基本类型
引用数据类型:引用式数据类型是需要导入
byte:数据类型是8位、有符号的、以二进制补码表示整数
最小值是-128(-2^7)
最大值是127(2^7-1)
默认值是0
例子:short s = 1000, short r = -20000
int数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31)
最大值是 2,147,483,647(2^31 - 1)
一般地整型变量默认为int类型
默认值是0
例子: int a = 100000, int b = -200000
long 数据类型是64位、有符号的以二进制补码表示的整数;
最小值是 -9,233,372,036,854,775,808(-2 ^ 63)
最大值是 9,233,372,036,854,775,807(2 ^ 63 - 1)
这种类型主要使用在比较大的整数的系统上
默认值是 0L;
例子:long a = 100000L, long b = -200000L
"L"理论上不分大小写,但是若写成"I"容易与数字"1混淆,不容易分辨。所以最好大写。
float 数据类型是单精度、32位、符合IEEE754标准的浮点数;
float 在存储大型浮点数组的时候可以节省内存空间
默认值是 0.0f
浮点数不能用来表示精度的值,如货币;
例子: float f1 = 234.5f
double 数据类型是双精度、64 位、符合 IEEE 754 标准的浮点数;
浮点数的默认类型为 double 类型;
double类型同样不能表示精确的值,如货币;
默认值是 0.0d;
例子:
double d1 = 7D ; double d2 = 7.; double d3 = 8.0; double d4 = 8.D; double d5 = 12.9867;
boolean数据类型表示一位的信息;
只有两个取值:true 和 false;
这种类型只作为一种标志来记录 true/false 情况;
默认值是 false;
例子:boolean one = true。
封装就是指属性私有化
根据需要提供的setter和getter方法来访属性
隐藏具体属性和实体细节,仅对外开发接口
控制程序中属性的访问安全级
目的:增强数据安全性,不能让其他用户随意访问和修改数据,简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员
继承是指将多个相同的属性和方法提取出来,新建一个父类,在java中只能继承一个父类,且只能继承访问权限非private属性和方法,
子类可以重写父类中的方法,命令与父类中同名的属性
目的:代码复用
目的:增加代码活跃性