JAVA 基础

48 篇文章 4 订阅

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

  1. final可修饰:
  • 变量 :值不能被改变
    • 成员变量(类内方法外)
    • 局部变量(形参)
  • 方法:方法不能重修
  • 类:不能被继承
  1. final相当于与c#中的const关键字
  2. 当用abstract修饰类时,当不想让继承的类重写时,就可用final修饰该方法
  3. Java常用的一些类都是不能拿被继承的(查看API文档,可发现这些类都是用final修饰的):String,Math,Boolean
    这里写图片描述

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个访问修饰符,其它对象对该类成员访问权限如下:

修饰符类内部同一个包子类任何地方
privateYNNN
defaultYYNN
protectedYYYN
publicYYYY


类只能用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可以是常量,或用单引号引起来的变量

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值