JVM(Java Virtual Machine)虚拟机:使用软件在不同操作系统中,模拟相同的环境。

JRE(Java Runtime Environment)运行环境:包含JVM和解释器,完整的Java运行环境。

JDK(Java Development Kit)开发环境:包含JRE + 类库 + 开发工具包(编译器+调试工具)。

JDK(开发环境)--->JRE(运行环境)--->JVM(虚拟机)

JRE是java应用程序的运行的环境,是JAVA程序运行的虚拟机以及Applet浏览器插件。

JDK是java应用的开发工具包,里边包含的有jre,以及java编译器,javac,javaDoc等工具

javac 命令 可以将java源文件编译为class字节码文件

java    命令 可以运行class字节码文件

1.数据类型

基本类型---8种

数字型:byte  short      int      long     float         double

字符型:char

布尔类型:boolean底层int类型-4个字节--JVM虚拟机规范

基本数据类型的转换是根据表示的数据范围

double>float>long>int>short>byte


引用类型

除了基本类型,都是引用类型

转义字符:\n    换行符    \t    缩进(TAB)    \\    反斜线    \'    单引号    \"    双引号

byte char short 参与运算时,会转换为int类型

自动类型转换:两种类型相互兼容,目标类型大于源类型

手动类型转换:两种类型相互兼容,目标类型小于源类型

基本数据类型

byte

short

int

long

float

double

boolean

char

包装类

Byte

Short

Integer

Long

Folat

Double

Boolean

Character

2.变量

无中生有,必须先声明,在赋值,最后使用

数据类型 变量名;

变量名的命名规则

3.运算符

算术            + - * / % ++ --

赋值运算符        += -= %= *= =

比较            == > < >= <=

逻辑            | || & && !

位                ^ | & << >>         二进制

字符串连接        +

三目运算符        X?Y:Z    X为true则Y,否则Z

4.表达式

变量和运算符按照一定的格式组成的字符串

变量 运算符

5.分支

if:

语法格式:if(boolean表达式){}else if(boolean表达式){}……else{}

范围更广

switch:

语法格式:switch(变量){case 常量:{};break;……defaul:{};break;}

1.变量的数据类型:int short byte char String 枚举 float double long

break 如果没有就具备穿透能力

代码精简,必须是变量

6.循环

for:

语法格式:for(初始变量定义;循环条件验证;变量的改变){循环体;}

while:

语法格式:while(boolean表达式){循环体}

避免死循环

二分查找算法

do/while:

语法格式:do{循环体}while(boolean表达式);

无论boolean表达式是否为true,至少执行1次

break和continue的区别

break可以用于switch和循环中,continue只能用于循环中

break在循环中表示中断循环,没有执行完的次数,不再执行

continue表示跳出本次循环,继续执行下一次循环

7.进制转换

二进制

三进制

八进制

十六进制

面试题

1.equals和hashcode的区别

hashCode() 的作用是获取哈希码,这个哈希码的作用是确定该对象在哈希表中的索引位置。
hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数。
equals它的作用也是判断两个对象是否相等,如果对象重写了equals()方法,比较两个对象的内容是否相等;如果没有重写,比较两个对象的地址是否相同,价于“==”。
同样的,equals()定义在JDK的Object.java中,这就意味着Java中的任何类都包含有equals()函数。
equals用来判断两个对象是否相等,hashCode用来获取哈希码。如果equals相等,hashcode一定相等。

所以如果equals重写,hashCode也要重写。但是hashcode相等,equals不一定相等

2.为什么重写了equals方法就必须要重写hashcode方法?

(1)如果只重写hashcode方法,返回的hash值虽然相同,但是其物理地址不相同,jvm会认为这是两个不同的对象

(2)如果只重写equals方法,在比较两个对象的时候,先判断hashcode返回的hash值就不一样,所以就不会调用equals方法

(3)重写hashcode方法和equals方法后,在返回hash值相同后再判断内容是否相同,才会判断出来这两个对象是不是相同的

3.深拷贝和浅拷贝的区别?

假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝

从基本数据类型和引用数据类型的分析,比如A为引用数据类型,B复制A,复制的是A的栈中地址,因此A数据改变,堆的数据也发生改变,这是B的内容也会改变,这就是浅拷贝。

4.值传递和引用传递?

值传递就是对于基本的数据类型,传递的是值的副本,如果这个副本发生改变,不会影响原来数据的数值

引用传递是对对象的传递,传递的是对象的引用,如果这个引用被外部做了改变,就会影响所有的对象。

5.成员变量和局部变量的区别?

(1)成员变量是属于类的,局部变量是属于方法的。

(2)成员变量能够被static public privated等权限修饰符修饰,局部变量不能被修饰

(3)成员变量会随着类的加载而加载,随着类对象的销毁而销毁,局部变量属于方法的,随着方法的调用结束而销毁

(4)当成员变量没有赋予初始值的时候,会自动给其相应类型的默认值,局部变量如果没有初始值则不会使用默认值。

(5)成员变量是属于类的存放在堆内存中,局部变量是属于方法的存放在栈内存中。

6.静态方法和实例方法的区别?

(1)静态方法的调用,,可以通过类名.方法名对象名.方法名调用,而实例化方法只能够通过对象名.方法名调用

(2)静态方法调用本类成员时,只能够调用  静态的成员方法和变量,不能调用非静态的。