Java基础概念
Java语言跨平台原理
在需要运行Java应用程序的操作系统上,先安装一个JVM(Java Virtual Machine)即Java虚拟机,由JVM来负责Java程序在该系统中的运行,不同的操作系统需要安装不同的JVM,这样Java程序只需要跟JVM打交道,底层的操作由JVM去执行。
JRE和JDK
- JRE(Java Runtime Environment)即Java运行时环境,主要负责运行Java程序。
- JDK(Java Development Kit)即Java开发工具包,主要用来开发Java程序,给Java开发人员使用的。
- JDK和JRE的关系
Java程序员开发完程序之后需要编译运行,因此JDK包含了JRE,安装JDK之后,就不用再去特意安装JRE了,JRE中包含了JVM(Java虚拟机)。对于那些只希望运行Java程序的人来说,只需要安装JRE即可
Java程序的编译与运行
- 源文件(source file).java文件,源文件里面所编写的代码叫做源代码(source code)。.java结尾的文件不能直接运行,该文件主要是给程序员看的,使用javac命令将其编译,生成以.class结尾的文件。使用javac命令编译源代码的时期叫做编译期,Java的编译器加载对应的java源文件,然后检查源码里面的语法,如遇到编译错误,不生成.class文件。
- .class文件叫做字节码文件,这些字节码文件是给计算机看的,运行字节码文件,使用java命令,之后JVM(java虚拟机)中的类装载器会从类路径下的电脑硬盘里面寻找这个class文件,然后将其加载到内存中开始运行。使用java命令运行的时期叫做运行期,这个阶段由类装载器寻找class文件并装载到jvm里面开始运行,这个时期如果出现了错误,我们称之为运行期错误。
Java程序运行的原理
- 经过javac命令将java源文件编译生成相应的class文件
- 使用java命令之后会由jvm中的了装载器将class文件装载到内存中
- jvm中的执行引擎负责只写class文件中的指令
- 执行引擎将指令发送给OS(operating system,操作系统)
- 操作系统再去调用相应的device(设备,例如打印机)
public class和class的区别
- 采用public class来声明class,那么文件名必须和类名一致
- 使用class来声明类,文件名可以是任何合法的文件名称,文件名不需要和Class类一致
- 在一个Java文件里面,可以声明多个class,但是只能声明一个public class
跨类调用方法
静态方法可以采用”类名.”的方式
public class Test01{
public static void main(String[] args){
//不在同一个类里面,只能使用"类名."的方式调用
Test02.m2();
//Error:在当前类中找不到m2方法.
//m2();
//在同一个类里面,可以直接调用
m1();
//同一个类里面,也可以采用"类名."的方式调用
Test01.m1();
}
public static void m1(){
System.out.println("m1");
}
}
/*
定义另一个类
*/
class Test02{
public static void m2(){
System.out.println("类Test02中的m2");
}
}
方法的执行顺序
main方法是程序的入口,程序是从main方法里面开始自上而下执行的。
方法重载发生的条件
- 发生在同一个类中,这个是判断重载的首要条件,即必须得是同一个类中的方法
- 方法名必须完全相同
- 参数列表必须不同。类型,个数,顺序,三者满足一个不同即可
注意:
- 方法是否构成重载和方法的返回值类型无关
- 方法重载和方法的修饰符列表无关
//参数的类型不同,构成重载
public static void m1(int a){}
public static void m1(double a){}
//参数的个数不同,构成重载
public static void m2(int a,int b){}
public static void m2(int a){}
//参数的顺序不同,构成重载,不过开发中不这样使用
public static void m3(int a,double b){}
public static void m3(double a,int b){}
//以下两个m4方法并没有构成重载.
//两个方法完全一样,错误
public static void m4(int a){}
public static void m4(int b){}
/*
方法的重载和方法的返回值类型无关,不构成重载
*/
public static void m5(){}
public static int m5(){
return 100;
}
/*
方法的重载和方法的修饰符列表无关,不构成重载
*/
static void m6(){}
public static void m6(){}