java 基础,java
java 基础,java
JDK、JRE、JVM区别与联系 |
JDK:Java Development ToolKit(Java开发工具包),JDK是整个java开发的核心,它包括Java的运行环境(JRE)、JAVA基础的类库(Java API)和JAVA工具(Javac),有三种版本:J2SE,J2EE,J2ME.
JRE:Java Runtime Environment(Java运行环境),是运行JAVA程序所必须的环境集合(包括JVM标准实现+Java核心类库),即Java平台,所有的java程序必须都要在JRE中运行(运行一个java程序必不可少的成分),它不包括开发工具(编译器,调试器等)
JVM:Java Virtual Mechinal(Java虚拟机),是JRE的一部分,是一个虚拟出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM的主要工作是解释自己的指令集(即字节码)并映射到本地的CUP的指令集或OS的系统调用。java语言是跨平台运行的,之所以能跨平台就是因为有JVM,实现的机制就是使用了不同的JVM映射规则,让其与操作系统无关。总之一句话:Java语言使用JVM屏蔽了与具体平台相关的信息,是的java语言编译程序只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改就可运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。即实现了“一次编译,到处运行”
三者联系:利用JDK开发属于我们的java程序(.java文件),通过JDK中的编译器(javac)将JAVA文件编译成java字节码(.class文件),在JRE上运行这些字节码,JVM解析这些字节码,映射到CUP指令集或OS的系统调用
数据类型 |
数据类型
字节数已标出
拆装箱
在java中,一切都以对象为基础,但是基本数据类型不是对象,如果要以对象的方式使用这8中基本数据类型,可以将他们转换成对象的包装类型。java5以前,要想将一个int型的值装换成对应的包装类型Integer,必须显示的使用new 创建一个新的Integer对象,或调用静态方法Integer.valueOf()
Integer i = new Integer(1);
或
Integer i= Integer.valueOf(1);
自java5 及以后,增加了自动装箱和自动拆箱机制,方便了基本类型与包装类型的相互转换工作,就不用程序员手动的转换,程序自动就完成了转换,直接赋值即可:
Integer i= 1;
装箱:基本类型 转换为 引用类型
拆箱:引用类型 转换为 基本类型
判空
在java中要使用一个变量前,必先先对声明和赋值,所以我认为在java中不存在判空的情况。但是以以前的经验来说:
- 基本类型判空:如int类型,用0来判空
- 引用类型判空:用null来判空
此问题还在研究中。。。
关键字 |
final
this—super
这两个关键字用在java的继承中
this:指该方法调用的对象,即该方法属于的那个对象
super:在子类中指基类对象
举例说明:
class Father{
Father(int n){
System.out.println("This is father " + n + "岁");
}
}
class Child extends Father {
private int n;
Child(int n){
super(40);
this.n = n;
System.out.println("This is child " + n + "岁");
}
}
class TestSuper {
public static void main(String arg[]){
Child child1 = new Child(18);
}
}
运行结果为:
This is father 40 岁
This is father 18 岁
总结出的规律:
- 子类的构造过程必须先调用基类的构造方法
- 子类使用super()调用基类的构造方法,且必须写在子类构造方法的的第一行
- 如果子类没有显示调用super(),会默认调用基类不带参数的构造方法,如果基类中没有无参的构造方法,程序就会报错
访问控制 |
类成员
如何在类成员前面加上以下4个访问修饰符,其它对象对该类成员访问权限如下:
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | Y | N | N | N |
default | Y | Y | N | N |
protected | Y | Y | Y | N |
public | Y | Y | Y | Y |
类
类只能用public和default修饰
- public类:可在任意地方被访问
- default类:只能被同一包内部的类访问
。。。
switch—case |
int i=2;
int n =2;
switch (i){
case 1:System.out.println(1);break;
case 'n':System.out.println(n);break;
default:System.out.println("没有");break;
}
运行结果:没有
,所以n变量是没有识别的
如果直接写:case n:System.out.println(n);break;
编译时会报错
```
int i=2;
final int n =2; //用final修饰
switch (i){
case 1:System.out.println(1);break;
case n:System.out.println(n);break;//常量
default:System.out.println("没有");break;
}
运行结果:2
public static void main(String arg[]){
int i=2;
int n =2;
switch (i){
case 1: System.out.println(2);break; //常量值
case 'n': System.out.println(n);break; //变量
case 'num()': System.out.println(n);break; //表达式
default:System.out.println("没有");break;
}
}
public int num(){
int m=2;
return m;
}
运行结果:case 'num()': System.out.println(n);break;编译时这句会报错
综上所看:
- switch (A): A只能是int型,或是可以转换成int型的表达式,如byte,short,char型
- case B: B可以是常量,或用单引号引起来的变量
相关文章
- 暂无相关文章
用户点评