JAVA面试基础知识(一)总结

JAVA面试基础知识(一)总结

JAVA基础

请你比较一下JAVA和JavaScript?

参考回答:

  • JAVA是一种半编译半解释的完全面向对象的程序设计语言,JavaScript是解释性的基于对象的脚本语言。
  • JAVA诞生于Sun公司,后被Oracle收购;JavaScripty是由NetSpace网景公司开发
  • JAVA源代码在执行前必须经过编译后才能执行;JavaScript是一种解释性编程语言,其源代码不需要经过编译,由浏览器解释执行。
  • JAVA采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不做声明,JavaScript的解释器在运行时检查推断其数据类型。
  • 代码格式不一样。

为什么说JAVA是一种半编译半解释的程序设计语言呢?

什么是编译型语言,什么又是解释型语言?

  • 编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,就可以直接运行这个程序。执行速度快,效率高,依靠编译器,跨平台性稍差。
  • 解释性语言:把已经做好的源程序,翻译一句,执行一句,直到结束。执行速度慢,效率低,依靠编译器,跨平台性较好。

那么为什么说JAVA是编译型语言呢?

第一个观点认为JAVA是编译型语言,因为JAVA程序想要运行,那么第一步就是要使用javac进行编译。没有经过编译的java文件,是没办法运行。

那么为什么又说JAVA是解释性语言呢?

那么第二个观点则是认为JAVA是解释型语言,JAVA经过编译后,仍然需要JVM的解释执行,javac将JAVA源文件编译成**.class文件,然后通过**JVM的解释执行。

综合上面两个观点来看,JAVA似乎既有编译型语言的特点,又有解释型语言的特点。

请你讲讲&和&&的区别?

参考回答:

&(与)运算符有两种用法:

  • &按位与

    • &按位与底层操作的是二进制数字,在JDK源码中常见,例如HashMap底层定位槽位的方式就是通过下面的公式实现:

      • (tab.length-1)&hash:即,数组长度-1按位与上hash值
    • &按位与操作两个数是如何实现的呢?我们来举一个简单实例:

      3 & 2 结果是多少呢?
      3的二进制数表示为b0011
      2的二进制数表示为b0010
      
      3 & 2 
      -------
      b0011 -----> 3
      -------
      b0010 -----> 2
      
      所以32的结果为2
      

      结论&按位与运算符是对两个整型操作数中对应位执行布尔代数,两个位都为1的时候输出1,否则为0。

  • &&逻辑与

    • &&运算符是短路与运算.
    • 逻辑与跟短路的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true.&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录判定用户名不说null而且不说空字符串,应当写为:username!=null && !username.equals(""),二者的顺序不能交换,更不能用&**运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointException异常.

int与Integer有什么区别?

JAVA是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,JAVA为每一个基本数据类型都引入了对应的包装类型,int的包装类就是Integer,从JAVA5开始引入了自动装箱/拆箱机制,使得二者可以相互转换.

JAVA为每个原始类型提供了包装类型:

  • 原始类型:boolean,char,byte,short,int,long,float,double
  • 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
class AutoUnboxingTest {
  public static void main(String[] args) {
    Integer a = new Integer(3);
    Integer b = 3;                // 将3自动装箱成 Integer 类型
    int c = 3;
    System.out.println(a == b);   // false 两个引用没有引用同一对象
    System.out.println(a == c);   // true a 自动拆箱成 int 类型再和 c 比较
  }
}

扩展:JAVA8大基本对象(如果算上void的话总共九种)

9种基本数据类型和取值范围

基本类型大小(位/bit)字节数(byte)最小值最大值默认值包装器类型
boolean--falsetruefalseBoolean
char16bit2bytesUnicode 0Unicode 2^16-1Character
byte8bit1byte-2^72^7-10Byte
short16bits2bytes-2^152^15-10Short
int32bits4bytes-2^312^31-10Integer
long64bits8bytes-2^632^63-10Long
float32bits4bytes0.0Float
double64bits8bytes0.0Double
void-----Void

在这里插入图片描述
图中从左到右都是隐式转换,无需再代码中进行强制转换从右到左均要进行强制类型转换,才能通过编译.强制转换会丢失精度。

//从左到右
byte i = 12;
System.out.println("byte:"+i);
short i2 = i;
System.out.println("short:"+i2);
char j = '²';
System.out.println("char:"+j);
int j3 = j;
System.out.println("int:"+j3);
long j4 = j;
/*
	输出结果:
	
    byte:12
    short:12
    char:²
    int:178
*/

//从右到左
double i = 178.33;
System.out.println("double:"+i);
float i1 = (float) i;
System.out.println("float:"+i1);
byte i5 = (byte) i;
System.out.println("byte:"+i5);
char i6 = (char) i;
System.out.println("char:"+i6);
/*
	输出结果:
	
    double:178.33
	float:178.33
    byte:-78
	char:²
*/

我们再web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,请你讲讲如何输出一个某种编码的字符串?

 Public String translate (String str) {
    String tempStr = "";
 try {
    tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");
    tempStr = tempStr.trim();
 }
 catch (Exception e) {
    System.err.println(e.getMessage());
 }
    return tempStr;
 }

JAVA中的final关键字有哪些用法?

  • 修饰类:表示该类不能被继承
  • 修饰方法:表示方法不能被重写
  • 修饰变量:表示变量只能赋值一次且赋值以后值不能被修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值