jvm,jdk,jre的区别
1、JVM -- Java virtual machine
JVM就是我们常说的Java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。
java的特点:一次编译,到处运行(就是由于有jvm的缘故)
2.JRE -- java runtime environment
JRE是指java运行环境。光有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了。(jre里有运行.class的java.exe)
3、JDK -- java development kit
JDK是java开发工具包,基本上每个学java的人都会先在机器上装一个JDK,那他都包含哪几部分呢?让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、 jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。
eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了
关键字和保留字
关键字:被Java语言赋予了特殊意义,用作专门的字符串
特点:关键字中的所有字母都小写
this是关键字,that不是
保留字:现有Java版本尚未被使用,但哟吼的版本可能作为关键字使用
标识符
凡是可以自己起名字的地方都是标识符
标识符的规则:1.有26个英语字母大小写,数字,下划线,_,$或中文汉字组成
2.数字不可以开头
3.不可以使用关键字和保留字,但包含关键字和保留字
4.java中严格区分大小写,长度无限制
5.标识符不能包含空格
java中名称的命名规范
1.包名:所有字母都小写 eg:aaabbbccc
2.类名:大驼峰,所有单词的首字母都大写 eg:AaaBbbCcc
3.变量名,方法名:第一个单词首字母小写,第二个单词开始每个单词首字母大写 eg:aaaBbbCcc
起名字时,尽量做到”见名知义“
变量
按照位置:局部变量:声明在方法内部的变量
成员变量(属性):声明在方法外部的变量
按照数据类型:基本数据类型变量:byte,short,int,long,float,double,char,boolean
(基本数据类型:自动转换和强制转换两种)
引用数据类型变量:String,数组,接口,Java类
Java的基本数据类型
Java有8种数据类型,大致为4类:(8位=1字节)
整数型:
byte:1字节
short:2字节
int:4字节
long:8字节,赋值时一般在数字后面加上l或L
浮点型
float:4字节,赋值时一般在后面加上f或F
double:8字节,赋值时一般在后面加上d或D
字符型
char:2字节,存储Unicode码,用单引号赋值
布尔型
boolean:1字节,只有true和flase两个取值,一字节就够了
Java修饰符
主要分为两种:访问修饰符和非访问修饰符
修饰符用来定义类,方法或者变量,通常放在语句的最前端。
访问控制修饰符:Java中,可以使用访问修饰符来保护对类,变量,方法和构造方法的访问。java支持4种不同的访问权限。
default(即默认,什么都不写):在同一个包内可见,不使用任何修饰类。使用对象:类,接口,变量,方法。
private:在同一个类内可见。使用对象:变量,方法。注意:不能修饰类(外部类)
public:对所有类可见。使用对象:类,接口,变量,方法。
protected:对同一包内的类和所有子类可见。使用对象:变量,方法。注意:不能修饰类(外部类)。
我们可以通过下表来说明访问权限:
修饰符 | 当前类 | 同 包 | 子 类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
面向对象的特征有哪些方面?
抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
- 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基类)、得到继承的类叫子类(派生类)。
- 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
- 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中的方法);2). 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)
int和Integer有什么区别?
Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。
&和&&的区别?
虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。