Java面试题(一)

Java基础部分

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

2、Java有没有goto?

3、说说&和&&的区别。

4、在JAVA中如何跳出当前的多重嵌套循环?

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?

6、short s1= 1; s1 = (s1+1是int类型,而等号左边的是short类型,所以需要强转)1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?(没有错)

7、char型变量中能不能存贮一个中文汉字?为什么?

8、用最有效率的方法算出2乘以8等於几?

9、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

10、静态变量和实例变量的区别?

11、是否可以从一个static方法内部发出对非static方法的调用?

12、Integer与int的区别

13、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型?

15、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?抽象类与普通类的唯一区别

16、Java中实现多态的机制是什么?

17、abstractclass和interface语法上有什么区别?

18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

19、内部类可以引用它的包含类的成员吗?有没有什么限制?

20、String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

21、String s = new String(“Java”)和String s = “Java”的区别

 

个人理解答案:

1、可以包含多个类,但是一个.java文件只能有一个public 修饰的 类,且类名与文件名一致,只能有一个公开的接口,否则编译报错

2、Java里面goto为保留关键字,在C语言中goto作为关键字,跳出循环

3、都可以作为逻辑与,但&&具有短路功能。&还可以作为位运算,按位与

4、使用标号,break:label,如下

ok:
for(int i=0;i<10;i++)
{
     for(int j=0;j<10;j++)
{
     system.out.println("i="+i+",j="+j);
     if(j==5)break ok;
}
}

5、switch参数只能是整数表达式或者枚举常量,整数表达式可以是int基本类型或Integer包装类型,由于byte,short,char都可以隐含转换为int,所以,可以。JDK1.7后,也支持string。long类型不可以,不能被隐式转换成int类型

6、short s1= 1; s1 = s1+1, 对于s1+1,s1是short,1是整形,所以相加的时候(s1+1)自动转型到整形,左边short右边int,编译报错

     short s1 = 1; s1 += 1;+=是java语言规定的运算符,所以正常

7、可以,Java char可以,unicode编码,如果某个特殊的汉字没有被包含在unicode编码字符集中,则不行

8、移位运算,2<<3,2左移三位相当于2 * ^{}_{2}3,位运算CPU直接支持的,所以最快

9、引用不能变,引用对象所指向的内容是可以改变的

10、静态变量又叫类变量,static修饰,属于类,生命周期与类一致,类被加载后就分配空间,可以使用,通过类名.调用

实例变量属于某个对象的属于,只有创建对象的时候,实例变量才被分配空间使用,对象名.调用

11、不能,静态方法属于类,非静态方法只能通过实例对象访问,类加载并且没有实例化对象的时候,无法判断出非静态方法到底属于哪一个对象

12、int是基本数据类型,默认值为0,Integer是包装类型,默认为null

13、Math.round()表示四舍五入,算法为Math.floor(x+0.5)

Math.round(11.5) = 12, Math.round(-11.5) = -11

14、Overload和Override的区别?Overloaded的方法是否可以改变返回值的类型

Overload重载,发生在类内部,静态多态性,表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

Override重写,发生在类间,动态多态性,子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

构造方法不能被重写,应为构造函数必须与类名一致

15、接口可以继承接口,抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。

抽象类与普通类的唯一区别

1.抽象类不能被实例化。

2.抽象类可以有构造函数,抽象方法不能被声明为静态。

3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体

4.含有抽象方法的类必须申明为抽象类

5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。

接口是对动作的抽象,抽象类是对本质的抽象

https://blog.csdn.net/u012092924/article/details/78342193

 

16、必须要有继承,父类引用指向子类对象,运行时多态,编译时多态依靠重载。类型由实际赋给该变量的对象决定

编译时类型由声明该变量时使用的类型决定,运行时

方法才具有多态性,变量没有

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

17、接口是对动作的抽象,抽象类是对本质的抽象

https://blog.csdn.net/u014732103/article/details/78448228

18、

1、abstract是抽象的,指的是方法只有声明而没有实现,他的实现要放入声明该类的子类中实现。

2、static是静态的,是一种属于类而不属于对象的方法或者属性


3、synchronized 是同步,是一种相对线程的锁。


4、native 本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是Java与其它语言通讯的一种机制。

https://www.cnblogs.com/guweiwei/p/6600364.html

19、可以,内部类就相当于外部类的成员,可以访问本类中的成员

静态内部类除外,静态内部类只能访问外部类中的静态成员

静态内部类:它是用static修饰的,在访问限制上它只能访问外部类中的static所修饰的成员变量或者是方法

成员内部类:成员内部类是最普通的内部类,它可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)

【注意】当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:

      外部类.this.成员变量

    外部类.this.成员方法

局部内部类:局部内部类是定义在外围类的方法中的,在访问的时候它可以直接访问外围类的所有成员!但是不能随便访问局部变量,除非这个局部变量被final修饰

匿名内部类

1、匿名内部类其实就是局部内部类的简写格式,只能使用一次。
2、定义匿名内部类的前提:
        内部类必须是继承一个类或者实现接口。
3、匿名内部类的格式:  new 父类或者接口(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象,可以理解为带内容的对象。
5、匿名内部类中定义的方法最好不要超过3个。

20、String s = "Hello";s = s + "world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

没有,String是不可变类

String s = "Hello"时,此时s指向一个String对象,内容是Hello,当s=s+"world"时,s不指向原来那个对象了,而是指向一个新的对象,内容是Helloworld

21、当常量池中没有Java对象时,String s = new String(“Java”);会创建两个对象

String s = "Java" 创建一个对象

==与equals()的区别:

  1. ==:比较引用类型比较的是地址值是否相同
  2. equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。

https://blog.csdn.net/zhouhuocleverset/article/details/61935578

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值