javase中部分基础简答题

1.简述方法的重载和方法的重写

override(重写)

1.方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载)

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3.存在于同类中。


2."=="和equals方法究竟有什么区别?

1. == 是一个运算符。

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符
2.Equals则是string对象的方法,可以.(点)出来。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。


3.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

 

short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)

short s1 = 1; s1 += 1;(可以正确编译)


运算符对基本类型的影响

当使用+、-、*、/、%运算符对基本类型进行运算时,遵循如下规则:

只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
否则,只要两个操作数中有一个是float类型的,另一个将会被转换成float类型,并且结果也是float类型;
否则,只要两个操作数中有一个是long类型的,另一个将会被转换成long类型,并且结果也是long类型;

否则,两个操作数(包括byte、short、int、char)都将会被转换成int类型,并且结果也是int类型。


4.java中实现多态的机制是什么?

Java实现多态有三个必要条件:继承、重写、向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

java中实现多态的机制是依靠父类或接口的引用指向子类。从而实现了一个对象多种形态的特性。其中父类的引用是在程序运行时动态的指向具体的实例,调用该引用的方法时,不是根据引用变量的类型中定义的方法来运行,而是根据具体的实例的方法。


5.简述this关键字用法。

(1)this调用本类中的属性,也就是类中的成员变量;
(2)this调用本类中的其他方法;
(3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。


 

6.什么是抽象类?什么是抽象方法?有什么特点?

抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类。

对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象

抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需的参数,没有方法体


7. 请说出作用域public,private,protected,以及不写时的区别

public 声明的为公共成员变量和函数成员,在整个类内类外都可使用。
private 声明的为私有成员变量和函数成员,只在声明的类内可以使用。
protected声明的为受保护成员变量和函数成员,类外不可使用。类内可以使用。
不使用关键字默认为类内使用
另外注意在继承的时候,他们的区别。
public 声明的在子类变为public
protected 声明的子类变为private
private 声明的在子类中不可用

   作用域       当前类              子类       包外
   public           √               √                  √               √


     protected     √               √                   √               ×

    default       √                √                   ×               ×

    private         √                ×                   ×               ×


8. &和&&的区别?

&和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。


9. 抽象类(abstractclass)和接口(interface)有什么异同?

抽象类:包含抽象方法的类就是抽象类 
接口:指抽象方法的集合,方法不包含方法体

相同点:

都不能被实例化

接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化

不同点:

接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽象类中实现


10. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

 Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。

Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。


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

不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,
才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以
直接调用


12. Integer与int的区别

1.Integer是int的包装类,int则是java的一种基本数据类型 
2、Integer变量必须实例化后才能使用,而int变量不需要 
3.Integer的默认值是null,int的默认值是0、

4.Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象。而int则是直接存储数据值。

说到这里就要说一下自动装箱和自动拆箱的区别了

什么是自动拆箱、装箱?

Integer i = 2;

int b = i;

手动装箱、拆箱为

Integer i = new Integer(2);//假如需要一个integer的对象i,值为2

int b=i.intValue();//又需要一个int型的值,大小与i相等

看例子:

Integer a = 1;

Integer b = 1;

Integer c = 144;

Integer d = 144;

Integer a1 = new Integer(1);

Integer b1 = new Integer(1);

System.out.println(a == b); //true

System.out.println(a.equals(b)); //true

System.out.println(a1 == b1); //false

System.out.println(a1.equals(b1)); //true

System.out.println(c == d); //false

System.out.println(c.equals(d)); //true

这是因为,在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象 。

而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象。

那么,为什么要这么设计呢?一般来说,小数字的使用频率很高,将小数字保存起来,让其始终仅有一个对象可以节约内存,

提高效率。

Java通过自动装箱和拆箱的机制,节省了部分内存开销和创建对象的开销,提高了效率同时简化了代码。

这其实用到了一种叫做享元模式的设计模式,感兴趣的可以去研究一下这个设计模式。

13. 构造器Constructor是否可被override?

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload

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

一个.java类中是可以有多个类 .但是,在多个类中,有且只有一个public类,且public类的类名必须与*.java的文件名相一致。

15. String和StringBuffer的区别

1.String是对象不是原始类型为不可变对象,一旦创建就不能修改它的值

对于已经存在的String的对象的修改都是重新创建一个新的对象,然后把值保存进去(旧的值会被回收)。String是final类,不能被继承

2.StringBuffer是一个可变对象,当对她进行修改不会像String那样重新建立对象,它只能通过构造函数来建立。

StringBuffer strBuffer = new StringBuffer();

注意,不能通过"="对其进行赋值


16. String s = newString("xyz");创建了几个String Object?二者之间有什么区别?

 两个。第一个对象是字符串常量"xyz" 第二个对象是new String("xyz")的时候产生的,在堆中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz" 另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存。

17. 面向对象的特征有哪些方面

封装:利用类将数据与方法绑定在一起,数据被保存在类的内部,系统只有通过被授权的方法才能够访问数据。 

继承:java是通过extends关键字来实现,在定义类的时候使用extends关键字指明新定义类的父类,在两个类之间建立继承关系.

多态:多态包括重写和重载,重写发生在子类和父类,重载发生在一个类

18. 10箱黄金,每箱100块,每块一两。有贪官,把某一箱的每块都磨去一钱。请称一次找到不足量的那个箱子 

第一箱子拿1块,第二箱子拿2块,n箱子拿n块,然后放在一起称,看看缺了几钱,缺了n钱就说明是第n个箱子

19. 接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是可继承实体类

20.类和对象的关系?

(1)类是抽象概念,对象是类具体的实例。

(2)一个类可以有多个对象,而一个对象只能属于一个类

(3)创建对象是类的主要使用方式

21. 类体中的方法包含哪些分类?

  构造方法

  普通方法

静态方法

22.类变量与实例变量的区别?

类变量也叫静态变量,也就是在变量前加了static 的变量;

实例变量也叫对象变量,即没加static 的变量;

区别在于:类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象

23.构造函数的作用和特点

作用:用来创建对象

特点:

(1)使用new空格方法创建(实例化)一个新对象。

(2)构造方法方法名必须与类名同名,并且没有返回值。

(3)一个类可以有多个构造方法(形参,列表不同)

(4)如果一个类中,没有定义任何构造方法,编译器会自动添加无参构造。

24.什么是继承

子类继承父类的非私有特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为。

25. Java中,请说明final关键字的使用

1.用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值;

2.用来修饰方法参数,表示在变量的生存期中它的值不能被改变;

3.修饰方法,表示该方法无法被重写;

4.修饰类,表示该类无法被继承。


判断题

1.  Java程序中是不区分大小写字母的 F

2.  Java程序编译后生成的字节码文件,其后缀是.exe F

3.  在java程序中,使用import语句引入的类是在解释器中实现的 T

4.  在运行字节码文件中,使用java命令,一定要给出字节码文件的扩展名.class F

5.  Java语言标识符中可以使用美元符T

6.  分号,逗号和冒号都可用为java语言的分隔符 T 

7.  Java语言的复合数据类型有3种:数据、类和包

8.  Java语言的基础数据类型有4种:整形,浮点型、字符型和布尔型 T

9.  数据由高类型转换到低类型时,采用强制转换,数据精度要受到损失.T

10. 布尔型常量可以自动转换为短整型常量

11. 类是一种类型,也是对象的一种模板  T

12. Java语言只支持单重继承,不支持多重继承

13. 类中说明的方法可以定义在类体外 F

14. class不是定义类的唯一关键字 F

15. 某类的对象可以作为另一个类的成员   T

16. 在类体内说明成员变量时不允许赋值。F

17. 最终变量就是java语言中的符号常量。 T

18. 静态变量的引用只能使用对象。 F

19. 静态方法只能处理静态变量。

20. 抽象方法是一种只有说明而无具体实现的方法

21. 最终方法是不能被当前子类重新定义的方法T  

22. Java语言中,方法调用一律都是传址的引用调用。F  

23. 非静态方法不能引用静态变量。F  

24. 静态初始化器是在构造方法被自动调用之前运行的。T

25. 抽象方法只有方法头,而无方法体。T

26. 抽象方法一定出现在抽象类中。

27. 最终类,最终方法和最终变量的修饰符都用final。T  

28. 创建对象时系统将调用适当的构造方法给对象初始化。 T

29. 使用运算符new创建对象时,赋给对象的值实际上是一个地址值。 T

30. 使用构造方法只能给非静态变量赋初值。T

31. 创建对象时,该对象占有的内存空间除了非静态的成员变量外,还有非静态的成员方法。T

32. Java语言中,对象赋值实际上是同一个对象具有两个不同的名字,因为它们都是同一个地址值。T

33. 对象可作方法的参数,对象数组不能作方法的参数F

34. Java语言中,所创建的子类都就应有一个父类。

35. Java语言中,类的继承是可以传递的。T

36. Java语言中,构造方法是可以继承的 F

37. 子类中构造方法应包含自身类的构造方法和直接父类的构造方法。T

38. 调用this或super的构造方法的语句必须放在第一条语句T

39. Java语言中,变量出现的位置只有一种,即为类体内定义的成员变量F

40. Java语言规定在嵌套的程序块中不允许定义同名变量。T

41. Java语言中,数组在静态和动态赋值时都判越界。

42. 说明或声明数组时不分配内存大小,创建数组时分配内存大小。

43. 基本数据类型的数组在创建时系统将指定默认值 T

44. Java语言在数组元素只有下标表示,没有指会表示 T

45. 创建数组时,系统自动将数组元素个数存放在length变量中,可供用户对数组操作时使用  T

46. 字符串可分为字符串常量和字符串变量,它们都是对象  T

47. Java语言不使用字符数组存放字符串   T



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值