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程序设计入门》

全局变量(或 成员变量 -在类范围内定义的变量):

在程序运行的全过程中,由程序向内存申请的内存空间,空间内容可以在程序全过程中进行操作或修改。

 

public class GlobalVar
{
    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 页。

 --------------------------------

快作用域:

 

package com.Java程序设计入门;

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中的:成员变量(全局变量)、 局部变量;       静态变量(类变量)、实例变量;

 

public class varTypes变量类型 {
    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 class BreakTest {
    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 2 3 4 5 6 7 8 9 10 11 12
=================
 1 3 5 7 9 11 13 15 17 19

 

 

 

 标签的使用:

 

package com.Java程序设计入门;

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;
                }
            }
        }
    
    }
}
 结果:

 

 

i=0
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
 

 

posted @ 2019-04-26 09:18  allenbackpacker  阅读(405)  评论(0)    收藏  举报