JVM 可以理解成一个可运行 Java 字节码的虚拟计算机系统
它有一个解释器组件,可以实现 Java 字节码和计算机操作系统之间的通信
对于不同的运行平台,有不同 的 JVM。
JVM 屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。
垃圾回收器(Garbage Collection) GC
不再使用的内存空间应当进行回收-垃圾回收。
在 C/C++等语言中,由程序员负责回收无用内存。
Java 语言消除了程序员回收无用内存空间的责任:
JVM 提供了一种系统线程跟踪存储空间的分配情况。并在 JVM 的空闲时,检查并释放那些可以被释放的存储空间。
垃圾回收器在 Java 程序运行过程中自动启用,程序员无法精确控制和干预。
JAVA跨平台原理 标识符Java 对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
规则如下:
由字母、数字、下划线(_)和美元符号($)组成。
不能以数字开头。
区分大小。
长度无限制。
不能是 Java 中的保留关键字。
标识符命名习惯:见名知意。
关键字Java 中有一些赋予特定的含义,有专门用途的字符串称为关键字(keyword)。全部是小写。
this在Java基础中,this关键字是一个最重要的概念。使用this关键字可以完成以下的操作:
调用类中的属性
调用类中的方法或构造方法 ,注意:在一个构造方法中,调用另一个构造方法时,调用的代码必须编写在构造方法的第一行。
表示当前对象
class Person{ private String name; private int age; Person(){ //调用下面的构造方法,如果下面还有代码,必须写在第一行 this("张三",12); } Person(String name,int age){ //调用类中的属性 this.name=name; this.age=age; } } static概述
static表示“静态”的意思,可以用来修饰成员变量和成员方法(后续还会学习 静态代码块 和 静态内部类)。 static的主要作用在于创建独立于具体对象的域变量或者方法 。
简单理解:
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。 并且不会因为对象的多次创建 而在内存中建立多份数据 。
重点 :
静态成员 在类加载时加载并初始化 ;
无论一个类存在多少个对象 , 静态的属性, 永远在内存中只有一份( 可以理解为所有对象公用 ) ;
在访问时: 静态不能访问非静态 , 非静态可以访问静态 ;
静态修饰的方法,被调用时,有可能对象还未创建 ;
//示例一 class Demo{ public static void main(String[] args){ /** Emp e1 = new Emp("张三","北京"); Emp e2 = new Emp("李四","北京"); Emp e3 = new Emp("王二","北京"); Emp e4 = new Emp("麻子","北京"); //假设公司迁址到天津 e1.setRegion("天津"); e2.setRegion("天津"); e3.setRegion("天津"); e4.setRegion("天津"); *///上述代码替换地址工作量非常大,所以可以把地址定义成静态变量 Emp.region="北京"; Emp e1 = new Emp("张三"); Emp e2 = new Emp("李四"); Emp e3 = new Emp("王二"); Emp e4 = new Emp("麻子"); Emp.region="天津"; } } class Emp{ private String name; //private String region; static String region; Emp(String name,String region){ this.name=name; this.region=region; } Emp(String name){ this.name=name; } Emp(){} public String getName(){ return name; } public void setName(String name){ this.name=name; } public String getRegion(){ return region; } public void setRegion(String region){ this.region=region; } } //示例二 public class Demo { public static void main(String[] args) { Clothes clothes1 = new Clothes(); Clothes clothes2 = new Clothes(); Clothes clothes3 = new Clothes(); } } class Clothes{ static int count; Clothes(){ count++; System.out.println("序号:"+count); } } //输出: //序号:1 //序号:2 //序号:3 finalfinal用于修饰属性(类里定义的标识符称为属性)和变量(方法体里定义的标识符成为变量:
通过final修饰的属性和变量都是常量,就是不能再次赋值的变量或属性 ;
final修饰的局部变量,只能赋值一次(可以先声明后赋值);
final修饰的成员属性,必须在声明时赋值 ;
全局常量(public static final)可以在任何位置被访问 ;