JavaSE常见面试题



1.java语言中的字符char可以存储一个中文汉字吗?为什么?
   可以,因为java语言中的字符占用两个字节,汉字也占用两个字节,java语言采用的是Unicode编码。
2. float数据在内存中怎么存储的?
   float类型数据在计算机中4个字节存储,遵循IEEE - 754格式标准:一个浮点数有两部分组成:底数m和指数e
   底数部分:使用二进制数来表示此浮点数的实际值
   指数部分:占用8bit的二进制,可表示数值范围为:0~255(指数范围为:-126 ~ 128)
   如:17.625  --->  1.001101 *2^4
3. a.  short s= 1; s = s+1;
   b.  short s = 1;s +=1;
   上面两个代码有没有问题?如果有,哪里有问题?
   第一个有问题,因为扩展的赋值运算符其实隐含了一个强制类型转换。
   因为 s = s+1;将s类型转换为int类型
   而s+=1;不是等价于s = s+1;而是等价于 s= (s的数据类型)(s+1);
4.请实现两个整数变量的变换
   public class OperatorTest{
      public static void main(String[] args){
      int a=10;
   int b = 20;
    // 方式一:使用第三方变量(开发中用)
    int c = a;
    a=b;
    b =c;
    //方式二:用位异或实现(面试用)。 左边:aba,右边:a^b
    a = a^b;
    b = a^b;
    a = a^b;
    //方式三:用变量相加的做法
    a = a+b;
    b = a-b;
    a = a-b;
    //方式四:一句话搞定
    b = (a+b) - (a=b);
    syso("a:"+a+",b:"+b);
   
   }
  
   }
  
5. 请用最有效的方式写出计算2乘以3的结果。
    2<<3;
6.三个数比较大小一步搞定 
 int max = (a>b)?((a>c)?a:c):((b>c)?b:c);
7.Math.round(11.5)等于多少? Math.round(-11.5)等於多少?

     Math类中提供了三个与取整有关的方法:ceil、floor、round,
  这些方法的作用与它们的英文名称的含义相对应,
  例如,ceil的英文意义是天花板,该方法就表示向上取整,
  所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;
  floor的英文意义是地板,该方法就表示向下取整,
  所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;
  最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),
  即将原来的数字加上0.5后再向下取整,
  所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
 
8.是否可以从一个static方法内部发出对非static方法的调用?

     不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,
  才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。
  也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,
  如果从一个static方法中发出对非static方法的调用,
  那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,
  所以,一个static方法内部发出对非static方法的调用。
 
 
9.成员变量和局部变量的区别(理解)
 (1)在类中的位置不同
  成员变量:类中方法外
  局部变量:方法定义中或者方法声明上
 (2)在内存中的位置不同
  成员变量:在堆中
  局部变量:在栈中
 (3)生命周期不同
  成员变量:随着对象的创建而存在,随着对象的消失而消失
  局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
 (4)初始化值不同
  成员变量:有默认值
  局部变量:没有默认值,必须定义,赋值,然后才能使用
  

10.静态变量和非静态变量的区别?

 *  语法定义上:
        静态变量前要加static关键字
        而非静态变量前则不加
  
 * 内存中位置:
      非静态变量:堆中
      静态变量:静态方法区
  
 * 生命期:
      非静态变量:随着对象的创建而存在,随着对象的消失而消失
       静态变量:随着类的加载而存在,

 *  程序运行时的区别:
       非静态变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
       静态变量不属于某个实例对象,而是属于类,所以也称为类变量,
       只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了
11.Overload和Override的区别
     override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。
  对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,
  就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。(抽象类)
  在覆盖要注意以下的几点:

 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

         overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,
  通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行
  。在使用重载要注意以下的几点:

    1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,
       不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,
       例如可以是fun(int,float),但是不能为fun(int,int));

 2、不能通过访问权限、返回类型、抛出的异常进行重载;

 3、方法的异常类型和数目不会对重载造成影响;

 4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

12.说说has a、like a与is a的区别。

答:is-a表示的是属于得关系。比如兔子属于一种动物(继承关系)。
    
  like a:接口中定义的是该继承体系的扩展功能。

     has-a表示组合,包含关系。比如兔子包含有腿,头等组件;
13. 线程如何同步和通讯。???????????????

14.抽象类的作用和特点

 可以定义抽象方法
  作用:定义了一种规则,要求子类必须实现
 可以定义非抽象方法
  作用:提高代码的复用性
    特点:
  抽象类和抽象方法必须用abstract关键字修饰。
  格式:abstract class 类名{};
        public abstract void eat();
 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
    抽象类不能被实例化,因为它不是具体的
    如何实例化呢?  ---> 按照多态的方式,有具体的子类实例化
 抽象类的子类:a.抽象类;b.重写抽象类中的所有抽象方法
    抽象类有构造方法:是由子类的super语句来调用,用于给抽象类中的成员初始化
15.一个类如果没有抽象方法,可不可以定义为抽象类?
    可以,其目的是不能让创建对象

16.final关键字:
    final是修饰符,可以修饰类,成员变量,成员方法
    修饰类:不能被继承
 修饰成员方法:不能被重写
 修饰变量:变成常量(是一种自定义常量),只能赋值一次。   --->常量可分为:自定义常量、字面值常量
          成员变量:
       赋值时机:
     显示初始化
     构造方法结束之前(代码块中也可以)
     构造方法结束之前(代码块中也可以)
   局部变量:
    赋值时机:
     定义时赋值
 
17.常见的修饰符
 public、protected、默认的和private是访问修饰符,可以修饰类,成员方法,成员变量,构造方法
 static:可以修饰成员变量,成员方法
 final:可以修饰类,方法,成员变量,局部变量
 abstract:可以修饰类,成员方法
18.abstract不能可哪些关键字共存?
    private(冲突)--->私有不能被继承,就不能被重写,而抽象类要求重写
 final(冲突)--->抽象类不能和final共存,因为抽象类自身无法创建对象,
 我们需要通过子类创建对象,一旦抽象类使用final关键字,那么抽象类就没有子类
 static(无意义)--->一旦加static我们就可以通过类名直接访问抽象方法,
 由于抽象方法没有方法体,没有任何意义,也不允许这样做
19.
 //获取20-50之间的值
 int num = r.nextInt(30)+20;//小公式:int num = r.nextInt(50-20)+20;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一些常见JavaSE基础面试及其答案: 1. Java中的基本数据类型有哪些? Java中的基本数据类型包括:byte、short、int、long、float、double、char、boolean。 2. String是基本数据类型吗? 不是。String是Java中的一种对象类型,它属于引用类型。 3. Java中的访问修饰符有哪些?它们的作用是什么? Java中的访问修饰符有public、private、protected和默认访问修饰符。它们的作用是控制类、属性和方法的访问权限。其中,public表示公共的,可以被任何其他类访问;private表示私有的,只能被本类访问;protected表示受保护的,可以被本类、同包及其子类访问;默认访问修饰符表示不加访问修饰符,只能被同包中的其他类访问。 4. Java中的final关键字有哪些用途? final关键字可以用来修饰类、属性和方法,它的作用如下: - final修饰类:表示该类不能被继承。 - final修饰属性:表示该属性不能被修改,即为常量。 - final修饰方法:表示该方法不能被子类重写。 5. 什么是Java中的异常? 异常是在程序运行过程中出现的一些错误或意外情况,它可以分为受检异常和非受检异常。受检异常必须在代码中进行处理或者声明抛出,否则会在编译时产生错误;非受检异常则不需要处理或声明抛出。 6. try-catch-finally语句块的作用是什么? try-catch-finally语句块用于处理Java中的异常。其中,try语句块用于执行可能抛出异常的代码;catch语句块用于捕获并处理异常;finally语句块用于在无论是否有异常抛出时都会执行的代码块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值