java 基础 review --- 洪恩软件 编程之道 《java程序设计入门》
JVM:JVM有自己完善的硬件架构,如处理器、堆栈(Stack)、寄存器等,还具有相应的指令系统(字节码就是一种指令格式)。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM是Java平台无关的基础。JVM负责运行字节码:JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。JVM解释执行字节码文件就是JVM操作Java解释器进行解释执行字节码文件的过程。
Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节码就是JVM的“机器语言”。javac.exe可以简单看成是Java编译器。
Java解释器:是JVM的一部分。Java解释器用来解释执行Java编译器编译后的程序。java.exe可以简单看成是Java解释器。
即时编译(Just-in-time compilation: JIT):又叫实时编译、及时编译。是指一种在运行时期把字节码编译成原生机器码的技术,一句一句翻译源代码,但是会将翻译过的代码缓存起来以降低性能耗损。这项技术是被用来改善虚拟机的性能的。
JIT编译器是JRE的一部分。原本的Java 程序都是要经过解释执行的,其执行速度肯定比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT。在运行时,JIT会把翻译过来的机器码保存起 来,以备下次使用。而如果JIT对每条字节码都进行编译,则会负担过重,所以,JIT只会对经常执行的字节码进行编译,如循环,高频度使用的方法等。它会 以整个方法为单位,一次性将整个方法的字节码编译为本地机器码,然后直接运行编译后的机器码。
| NO. | 基本数据类型 | 占用几字节 | 2的多少次方 |
| 1 | byte | 1 | 8 |
| 2 | short | 2 | 16 |
| 3 | int | 4 | 32 |
| 4 | long | 8 | 64 |
| 5 | float | 4 | 32 |
| 6 | double | 8 | 64 |
| 7 | char | 2 | |
| 8 | boolean |
洪恩软件 编程之道 《java程序设计入门》
在程序运行的全过程中,由程序向内存申请的内存空间,空间内容可以在程序全过程中进行操作或修改。
{
int a = 10;
double b = 20;
public static void main(String[] args)
{
GlobalVar globalVar = new GlobalVar();
System.out.println("a="+ globalVar.a);
globalVar.print();
System.out.println("after changed, a="+globalVar.a);
}
public void print()
{
System.out.println("global variable a="+a+" b="+b);
a=30;
System.out.println("global variable a=" +a+" b="+b);
}
}
局部变量(在一个方法内定义的变量):
public class LocalVar
public static void main(String[] args)
{
LocalVar localVar = new LocalVar();
localVar.print();
}
public void print()
{
int a = 10;
double b = 20;
System.out.println("111 local var a="+a + " b= "+ b);
a=30;
System.out.println("222 local var a="+a + " b= "+ b);
}
}
变量的引用:传值引用 和 传址引用
变量还可分为常规变量(基本类型的变量 - byte/short/long/int/float/double/char/boolean) 和 对象变量
内存的分配:Java 中变量主要保存在6个地方:
1. 寄存器-位于计算机 cpu 内部,最快。便以及自主分配,我们没有任何控制权,程序中也找不到任何寄存器的操作踪迹。
2. 栈: 物理上的概念就是驻留常规的 RAM 区域。基本类型的变量就是放在这里。但并不是唯一放到这里的内容 - 对象句柄也放在这里。
3. 堆: 常规用途的内存池,也就是 ram 区域。Java中我们的任务基本上都是在堆中进行的。我们一直所说的 对象 就是在堆中。
4. 静态存储: java 中用 static 关键字指出一个对象的特定元素是静态的。但 java 对象本身永远不可能置于静态存储空间。
5. 常量存储: Java中用 final来声明,保证他的值永远不会被改变。
6. 非 RAM 存储:外部资源,保存在磁盘上。
Student aStudent = new Student();
这里 aStudent 是对象的一个句柄。而不是对象本身
bStudent = aStudent;
这是把 aStudent 句柄赋值给 bStudent。这样的结果就是 bStudent 和 aStudent都指向同一个对象。如果对象的值改了,那么 aStudent 和 bStudent 的值都改了。
编写程序的时候一定要清楚所用句柄当前的状态,以避免发生不正当的操作。
自增 / 自减 运算符:
++x: 先加后用
--x: 先减后用
x++:先用再加
x--:先用再减
短路现象:见 洪恩软件 编程之道 《java程序设计入门》第 56 页。
--------------------------------
快作用域:
public class PartArea {
public static void main(String[] args) {
int a = 15;
int b = 2;
if (a == 15)
{
double c = 2;
System.out.println(a/c);
System.out.println("a is " + a);
}
System.out.println(c); //此时 C 已经不可用,报错,因为他的作用域只是在 if 块中
}
}
=====================
Java中的:成员变量(全局变量)、 局部变量; 静态变量(类变量)、实例变量;
private String name; //成员变量(全局变量)、实例变量
private int age; //成员变量(全局变量)、实例变量
private int ID; //成员变量(全局变量)、实例变量
public static final String school = "卡塞尔学院"; //成员变量(全局变量)、静态变量(类变量)
public static String level = "SSS"; //成员变量(全局变量)、静态变量(类变量)
public int getAge() {
return age;
}
public int getId() {
return ID;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setId(int ID) {
this.ID = ID;
}
public void setName(String name) {
this.name = name;
}
public void study(){
String subject1 = "屠龙"; //局部变量
String subject2 = "炼金术"; //局部变量
System.out.println("学习科目: " + subject1 + "、" + subject2);
}
public static void main(String[] args) {
varTypes变量类型 demo = new varTypes变量类型();
demo.setAge(23);
demo.setId(14000001);
demo.setName("楚子航");
System.out.println("ID: " + demo.getId() + "Age: " + demo.getAge() + "Name: " + demo.getName());
System.out.print("主修科目: ");
demo.study();
System.out.println("学院:" + varTypes变量类型.school);
System.out.println("等级:" + varTypes变量类型.level);
}
}
================
break / Continue
public static void main(String[] args) {
for(int i=1; i<20; i++)
{
if (i==13)
{
break;
}
System.out.print(" "+i);
}
System.out.println("\n=================");
for(int i=1; i<20; i++)
{
if (i%2==0)
{
continue;
}
System.out.print(" "+i);
}
}
}
结果:
=================
1 3 5 7 9 11 13 15 17 19
标签的使用:
public class LabeledFor {
public static void main(String[] args) {
outer:
for(int i=0;i<5;i++)
{
System.out.println("i="+i);
inner:
for(int j=0; j<3;j++)
{
System.out.println("j="+j);
if(j%2==0)
{
System.out.println("continue inner");
continue inner;
}
if(i%2==1)
{
System.out.println("continue outer");
continue outer;
}
if(i==3)
{
System.out.println("break outer");
break outer;
}
}
}
}
}
j=0
continue inner
j=1
j=2
continue inner
i=1
j=0
continue inner
j=1
continue outer
i=2
j=0
continue inner
j=1
j=2
continue inner
i=3
j=0
continue inner
j=1
continue outer
i=4
j=0
continue inner
j=1
j=2
continue inner
浙公网安备 33010602011771号