Java面试题--- OOP基础 知识

目录

1、什么是b/s,什么是c/s?

2、java都有哪些开发平台?

3、什么是jdk?什么是jre?

4、java语言有哪些特点?

5、面向对象和面向过程的区别?

6、什么是数据结构?

7、java的数据结构都有哪些?

8、什么是oop?

9、类与对象的关系?

10、java中有哪几种数据类型?

11、标识符命名规则

12、什么是显示类型转换,什么是隐式类型转换?

13、什么是拆装箱?

14、针对浮点数运算出现的误差问题,如何解决?

15、面向对象的特征:(经典)

16、访问修饰符  public、 friendly、protected、private以及默认时的作用域区别?

17、float  a= 3.6   这样的写法正确吗?

18、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1; 有错吗?

19、重载和重写的区别

20、== 与 equals的区别?

21、i++与++i的区别?

22、程序的结构有哪些?

23、数组的实例化有哪几种?

24、java中几种数据类型的默认值?

25、java中常用的类包?

26、object类中常用的方法?

27、java中有没有指针?

28、java中是值传递还是引用传递?

29、实例化数据后,还能不能改变数据的长度?

30、逆序一个数组的方式?

31、构造方法能不能被显示调用?

32、构造方法可不可以被重载,可不可以被重写?

33、static 关键字有什么作用?

34、final关键字的作用

35、string、stringbuilder、stringbuffer的区别?

36、java的math类中有哪些常用的方法?

37、String类的常用方法有那些?

38、java是单继承还是多继承?

39、super与this表示什么?

40、普通类与抽象类的区别?

41、接口有什么特点?

42、接口与抽象类的区别?

43、hashCode的作用?

44、java中的四种引用?强弱软虚

45、java创建对象的四种方法?

46、有没有可能两个不相等的对象有相同的hashcode

47、深拷贝与浅拷贝的区别?

48、a=a+b ,a+=b,有什么区别吗?

49、final、finalize、finally的区别?

50、jdbc的操作步骤

51、在使用jdbc的过程中,如何防止sql注入?

52、使用jdbc过程中,如何调用一个存储过程?

53、是否了解数据库连接器,使用数据库连接池有什么好处?

54、你所了解的数据源技术有哪些?

55、&和&&的区别

56、静态内部类如何定义

57、什么是内部类,普通内部类有什么限制?

58、Java中有没有goto?

59、用最有效率的方法计算2*8等于几?

60、java的常量优化机制作用在哪几种数据类型?

61、java的排序方式有哪几种?具体编码实现方法(重中之重,必须熟练掌握)

62、char型变量能不能存储一个中文汉字,为什么?

63、java中是否存在内存泄露问题?

64、抽象方法能否是静态的,能否是本地的,能否用synchronized修饰?

65、是否可以从一个静态方法内部发起对非静态方法的调用?

66、如何实现对象的克隆?

67、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类 是否可继承具体类(concreteclass)?

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


1、什么是b/s,什么是c/s?

b/s全称为broser/server,浏览器/服务器程序

c/s全称为client/server,客户端/服务器程序,桌面程序

2、java都有哪些开发平台?

java SE 主要用在客户端开发  

java EE 主要用在web应用程序开发

java ME 主要用在嵌入式应用程序开发

3、什么是jdk?什么是jre?

jdk,全称 java development kit,  java软件开发工具包,java开发人员所需安装环境

jre,全称java runtime environment,java运行时环境,java 程序运行所需要的环境。 

jdk中包含jre。jdk中包含三部分,1、jre及jvm     2、java基本类库   3 、 java开发工具

4、java语言有哪些特点?

1、简单易学,有丰富的类库。

2、面向对象,(java最重要特征,能够降低耦合,提高内聚)

3、平台无关性。(jvm是java跨平台使用的根本)

4、安全可靠

5、支持多线程

5、面向对象和面向过程的区别?

1、面向过程:java早期的其中一种编程思想,强调的程序的是功能行为,功能的执行过程,即执行顺序,每个功能都是由函数实现的,在依次执行。

2、面向对象:基于面向过程,站在对象的角度思考问题,将功能行为拆解到一个个对象当中,强调具有某些功能的对象。面向对象最小的程序执行单元是类。稳定性好,可重用性强,可维护性高。能够使工程更加模块化,具有更低耦合和更高的内聚。

6、什么是数据结构?

计算机存储、组织数据的方式

7、java的数据结构都有哪些?

线性表:arraylist

链表:linkedlist

栈 stack

队列  queue

树 tree

图 Map

8、什么是oop?

oop,面向对象,object oriented programing

9、类与对象的关系?

类是对象的抽象,对象是类的是实例化结果。

10、java中有哪几种数据类型?

大类小类对应的包装类所占字节数表示范围
整型byteByte1
整型shortShort2
整型intInteger4
整型longLong8
浮点型floatFloat4
浮点型doubleDouble8
字符型charCharacter2
布尔型booleanBoolean1

11、标识符命名规则

1、标识符以字母、数字、$、下划线组成

2、标识符不能以数字开头,标识符不能是关键字

3、类命名采用大驼峰方式,方法名、变量名以小驼峰方法,力求做到见文知意

12、什么是显示类型转换,什么是隐式类型转换?

显示类型转化就是强制类型转换,将大范围转为小范围,如object转String

隐式类型转换就是自动类型转换,将小范围转为大范围,如String转object

13、什么是拆装箱?

装箱就是基本数据转型转化为其包装类,如int 转为 Integer,

通过 valueOf()方法实现,如  integer  i  = Integer.valueOf(8);

拆箱就是包装类转化为器基本数据类型,如 integer转化为 int

Integer   a = 5;(这里是一个自动装箱的,将int类型的5,变为Integer类型)

int  i = Integer.intValue(a); 

14、针对浮点数运算出现的误差问题,如何解决?

使用bigDecimal进行运算

15、面向对象的特征:(经典)

抽象、继承、封装、多态

16、访问修饰符  public、 friendly、protected、private以及默认时的作用域区别?

修饰符当前类当前包子类其他包
public
protected不能
default不能不能
private不能不能不能

17、float  a= 3.6   这样的写法正确吗?

不正确,3.6默认为double类型,将double类型转化为float类型,属于大范围转小范围,需要进行强制类型转换,即   float a = (float)3.6 或者   float = 3.6F

18、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1; 有错吗?

第一个报错,第二个不报错。

两个的区别就在于  s1= s1 +1;     s1+1结果为int,而 int 类型转化为short属于大转小,需要强转。否则就会报错。

而  s1+=1; 这种写法就相当于  s1 = (short)  (s1+1),进行了强转,所以正确。

这里可能会有疑问吗,为什么 short s1 = 1;  1默认是int类型,赋给s1为什么不报错。

这里涉及到java的常量优化机制, 即当  = 右侧全部为常量时,只要结果在short的表示范围之内,就不会报错。

19、重载和重写的区别。

1、重载和重写都是java面向对象,多态的体现。

2、重载发生在同一个类当中,指两个方法拥有相同的方法名,参数列表不同。(仅返回值类型不同不叫重载,编译会报错)

3、重写发生在父类与子类之中,指子类的方法与父类有相同的方法名、参数列表、返回值类型,方法的访问修饰符的范围要大于等于父类。

20、== 与 equals的区别?

1、==比较的是操作符两端的操作数是否是同一对象。

2、两边的操作数必须是同一类型才能通过编译通过。

3、==比较的是地址,如果是整形数字,则比较的是值。

4、object的equals方法中也是进行==的操作来比较,类都是继承自object,若不覆写,贼也是equalsfang

21、i++与++i的区别?

i++,先赋值,后计算。

++i, 先计算,后赋值

22、程序的结构有哪些?

选择结构、顺序结构、循环结构

23、数组的实例化有哪几种?

静态实例化: int [] a = new int [] {1,2,3};

动态实例化 int []a = new int [5];

24、java中几种数据类型的默认值?

byte、short、int、long默认值为0;

boolean 默认值为 false

char默认值为‘’

float、double默认值为0.0

对象类型的默认值为null

25、java中常用的类包?

java.lang

java.sql

java.swing

java.awt

java.io

java.net

java.math

java.util

26、object类中常用的方法?

equals

toString

HashCode

wait

notify

clone

getClass

27、java中有没有指针?

有指针,但是隐藏了,开发人员无法直接操作指针,由jvm控制

28、java中是值传递还是引用传递?

理论上,java中都是引用传递,基本数据类型,传递的是值的副本,对象类型,传递的是对象的引用,

29、实例化数据后,还能不能改变数据的长度?

不能,数组一旦实例化,其长度就不能改变了

30、逆序一个数组的方式?

新建一个数组,从后往前遍历原数组,一次讲完元素存入其中。如果需要倒序的是一个List,则可以直接运用Collections.reverse()方法

31、构造方法能不能被显示调用?

构想方法不能像普通方法一样被调用,只有才实例化对象时才能被系统调用

32、构造方法可不可以被重载,可不可以被重写?

可以被重载,如有参构造,无参构造;不能被重写

33、static 关键字有什么作用?

static关键字可以修饰内部类、方法、变量、代码块

static修饰的内为静态内部类。

static修饰的方法是静态方法,属于整个类,而不属于某一个实例,无法被重写。可以通过类名直接调用。内部不能使用this,super关键字

static修饰的变量为静态变量,为整个类锁共享,不属于某一个实例。类加载的时候只会分配一次内存。

static修饰的代码块为静态代码块,类加载的时候只会执行一次。

34、final关键字的作用

被final修饰的类不能被继承

final修饰的方法不能被重写

final修饰的变量不能被改变,如果变量是引用,则表示引用不可变,但引用指向的对象可变

final修饰的方法,jvm会尝试将其内联,以提高运行效率

final修饰的常量,在编译阶段会入常量池


35、string、stringbuilder、stringbuffer的区别?

1、String是一个只读字符串,底层是用final修饰的char数组。一旦定义就不能改变。

String的+操作,都是先定义一个stringBuilder对象,在执行append操作,及toString操作。

因此对字符串的操作  StringBuiler和StringBuffer的效率更高

2、StringBuiler与StringBuffer都继承了abstractStringBuilder 的区别在于,StringBuffer的方法用了synchonized关键字修饰,是线程安全的。

36、java的math类中有哪些常用的方法?

abs()求绝对值

power() 幂运算

squart() 平方根

round() 四舍五入

random() 0到1的随机数,不包括1

37、String类的常用方法有那些?

charAt, 获取指定下标的字符

indexOf, 获取指定字符的下标

repalce,替换

split,分割字符串

strim,去除字符串两端的空白

toLowerCase:全部小写

toUpperCase: 全部大写

equals:判断内容相等

length:长度

getBytes, 获取byte类型数组

subString,截取

format格式化

38、java是单继承还是多继承?

java类是单继承,多实现

java接口可以多继承

39、super与this表示什么?

this表示当前类

super表示当前类的父类、

40、普通类与抽象类的区别?

抽象类中含有抽象方法,不能直接实例化。

41、接口有什么特点?

接口中的声明的变量全部都是public static final 修饰的

接口中的所有方法都是抽象方法

接口中没有构造函数

接口不能直接实例化

接口可以多继承

42、接口与抽象类的区别?

1、从设计的角度想,抽象类的使用是为了实现代码复用。接口的使用是对类的一种规则,让不同的类具有些某种特定行为。

2、抽象类中含有抽象方法,用abstract关键字修饰,没有方法体,子类必须重写抽象方法。

抽象类中也可以含有普通方法。可以用public、private、protected 修饰

3、抽象类不能直接实例化,只能被继承,一个类只能继承一个抽象类。

4、接口中的全部方法都是抽象方法。

5、接口不能直接实例化,但可以定义变量,引用具体实现类的的对象。

6、接口可以多继承,具体类可以通过实现接口实现多继承。

43、hashCode的作用?

提高集合的查询效率

44、java中的四种引用?强弱软虚

强引用 如String a = new String("aaa"); 即时内存不足也不会被回收

软引用,在内存不足时会被jvm回收。如创建缓存,将对象放入缓存,内存不足时,就会被回收。

弱引用,jvm只要发现了他,就会被回收

虚引用,机制与弱引用差不多。

45、java创建对象的四种方法?

new 创建

反射创建

序列化机制

采用clone机制

46、有没有可能两个不相等的对象有相同的hashcode

有可能,这种现象就被称作是hash冲突。

解决hash冲突的办法有三种

1、拉链法  2、 开放定址法   3 、 再哈希法

47、深拷贝与浅拷贝的区别?

浅拷贝仅仅复制了其所拷贝的对象,没有拷贝对象中引用的对象。

深拷贝既复制了其所拷贝的对象,也复制了对象中引用的对象。

48、a=a+b ,a+=b,有什么区别吗?

=+ 会进行隐式的类型转化,将+=右侧的结果隐式转化为左侧变量的类型。

如  short  a=1;

a= a+1; 会报错

a+=1; 不会报错,因为 a+=1,等同于 a= (short) (a+1);

49、final、finalize、finally的区别?

性质不同

final为标识符,

finalize()是方法

finally为区别标志,用在try语句当中

作用不同:

final为标识符,final用于标识常量,存储在jvm的常量池当中。

finalize为object中的方法,用于在对象“消失”时,由jvm进行调用进行垃圾回收。

finlly用于标识代码块,try语句当中,不管try是否成功,finally中的代码都会执行。

50、jdbc的操作步骤

1、加载数据库驱动 

2、打开数据库连接

3、调用sql语句

4、处理返回结果

5、关闭连接

51、在使用jdbc的过程中,如何防止sql注入?

使用preparedStatement类(拓展:为什么preparedStatement可以防止sql注入

52、使用jdbc过程中,如何调用一个存储过程?

使用callableStatement

53、是否了解数据库连接器,使用数据库连接池有什么好处?

1、数据库连接器是非常消耗资源的,影响到了程序的性能指标。

2、数据库连接池是用于分配、管理、释放数据库连接的,可以使程序重复使用一个数据库连接,而不必每次都创建一个新的连接。

3、通过释放等待时间较长的数据库连接可以避免数据库因为创建太多的连接而造成的连接遗漏问题,提高程序的性能。

54、你所了解的数据源技术有哪些?

dbcp、c3p0,用的最多的是c3p0,因为c3p0更加稳定,通过配置文件的方式来配置数据库信息,而不是硬编码。当数据库连接发生改变时,不需要更改程序代码。

55、&&&的区别

&是位运算符。

&&是布尔逻辑运算符,在进行逻辑判断时,用&的情况下,前面的表达式为false,仍需判断&后的表达式。用&&,前面为false,则不再运算后面的,提升效率。

56、静态内部类如何定义

1、静态内部类可以访问外部类的静态变量和静态方法。

2、静态内部类可以定义静态变量、方法、构造方法等

3、静态内部类的使用可以不依赖与外部类的实例。

57、什么是内部类,普通内部类有什么限制?

没用static修饰的内部类就是普通内部类。普通内部类不能定义静态变量和方法。用final修饰的除外。

58、Java中有没有goto?

goto是java中的保留字,目前没有在java中使用

59、用最有效率的方法计算2*8等于几?

2<<<3

最有效率的算法就是位运算,左移一位相当与*2,左移3位就是*8.

60、java的常量优化机制作用在哪几种数据类型?

byte、short、char、String

61、java的排序方式有哪几种?具体编码实现方法(重中之重,必须熟练掌握)

62、char型变量能不能存储一个中文汉字,为什么?

可以,char型变量占2个字节。java中采用unicode作为编码方法,unicode是一个定长的编码标准,每个字符都是2个字节,无论是中文、英文、数字。因此char可以存储。

63、java中是否存在内存泄露问题?

理论上jvm中有垃圾处理(GC)机制,不会发生内存泄漏,但在实际开发过程中,会发生。例如

hibernate中session中的对象属于持久太,gc是不会回收这些对象的,然而这些对象中可能存在无用的垃圾对象,如果不及时关闭或清空session,就有可能发生内存泄漏。

64、抽象方法能否是静态的,能否是本地的,能否用synchronized修饰?

都不能,抽象方法需要被重写,静态方法不能重写。本地方法需要本地代码实现,抽象方法没有方法体,synchronized关键字修饰与方法的实现细节有关,抽象方法不涉及实现细节,因此也是矛盾的。

65、是否可以从一个静态方法内部发起对非静态方法的调用?

不可以,静态方法只能调用非静态的方法。因为非静态方法依赖于类的实例。调用静态方法的时候类可以并没有实例化。

66、如何实现对象的克隆?

有两种方法

1、实现cloneable接口,并重写object的clone方法。

2、实现serializable接口,并通过对象的序列化和反序列化实现。

67、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类 是否可继承具体类(concreteclass)?

都可以

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

可以包含多个类,但只可以包含一个public类,且public类的类名要与文件名保持一致。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值