每天的工作您都在写代码写业务写Bug,Java的面试题您还能记得多少,这篇就讲讲Java基础语法
JAVA基本语法
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)静态方法调用本类成员时,只能够调用静态的成员方法和变量,不能调用非静态的。\