Java面试题 常用知识点总结 一

本文深入讲解面向对象编程的三大特征:继承、封装和多态,包括重载与重写的概念,探讨String类的不可继承性,构造器的重载与不可重写特性,以及访问修饰符的使用和数据类型的封装。

要想上梯子必须从底下爬起。

冰冻三尺非一日之寒,滴水石穿非一日之功.

先总结一下一些概念吧。

1.面向对象的特征有哪些方面?怎么理解?

答:面向对象的三大特征:1.继承  2.封装 3.多态性

(1)继承:就是保留父类的属性,开扩新的东西。通过子类可以实现继承,子类继承父类的所有状态和行为,同时添加自身的状态和行为

(2)封装:就是类的私有化。将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。

(3)多态:是允许将父对象设置成为和一个和多个它的子对象相等的技术。包括重载和重写。重载为编译时多态,重写是运行时多态。

首先我们来讲讲:重载(Overloading)

1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同一时候存在,具有不同的參数个数/类型。

重载Overloading是一个类中多态性的一种表现。

2) java的方法重载,就是在类中能够创建多个方法。它们具有同样的名字,但具有不同的參数和不同的定义。

调用方法时通过传递给它们的不同參数个数和參数类型来决定详细使用哪个方法, 这就是多态性。

3) 重载的时候,方法名要一样,可是參数类型和个数不一样,返回值类型能够同样也能够不同样。无法以返回型别作为重载函数的区分标准。

然后我们再来谈谈 重写(Overriding)

2)若子类中的方法与父类中的某一方法具有同样的方法名、返回类型和參数表。则新方法将覆盖原有的方法,方法重写又称方法覆盖。

2.是否可以继承String类?(上面提到了继承,就想到了这个) 

答:String 类是final类,不可以被继承。(关于final关键字,请看下文或之后文章详细介绍)。

3.构造器(constructor)是否可被重写(override)?(上面提到了重写,就想到了这个) 

答:构造器不能被继承,因此不能被重写,但可以被重载.(比如:有参构造和无参构造以及部分参数构造 之间形成了重载)。

4.访问修饰符public,private,protected,以及不写(默认)时的区别?

这么来说吧,在说明这四个关键字之前,我想就class之间的关系做一个简单的理解,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友

default:类的成员不写访问修饰时默认为default。

public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用。

private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private.

详细结果如下图:(此图是网上找的,借花献佛一下下。。)

下来我来整理一下关于数据类型方面的知识。

5.谈谈 Java九种基本数据类型的大小,以及他们的封装类。

答:java提供了一组基本数据类型,包括 boolean, byte, char, short,  int, long, float, double, void. 

同时,java也提供了这些类型的封装类,分别为 Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void

谈到这里,就想到了一些常见的题,来聊一聊。

6.String 是最基本的数据类型吗? 

答:根据第五题,当然是回答  不是。此题废话.......(string其实是有很多可考的东西,慢慢分析一波常见的坑).

其实说到这里,本应该配一张string在new和定义的时候的内存分配图会更好一点,可是无奈我不善作图,所以在网上找一张图。如下图吧:

先对此图来一波代码分析,代码如下:

String s1 = "china";
String s2 = "china";
String s3 = "china";

String ss1 = new String("china");
String ss2 = new String("china");
String ss3 = new String("china");

对于字符串,其对象的引用都是存储在栈中的(s1,s2,s3,ss1,ss2,ss3),如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中(s1,s2,s3),如果是运行期(new出来的)才能确定的就存储在堆中。

这里解释一下黄色这3个箭头,对于通过new产生一个字符串(假设为“china”)时,会先去常量池中查找是否已经有了“china”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”china”对象的拷贝对象。

那么问题来了,

Strings=newString(“xyz”);产生几个对象?

嗯,是一个或者两个。如果常量池中原来没有”xyz”,就是两个,有的话,就是一个。(很长问,此题)

首先铭记在心,string是 final类,你懂得。

1):Strings=”Hello”;  s=s+”world!”;   这两句代码执行后,原始的String对象中的内容变没?

答:没有,因为String被设计成为不可变类,不能修改,继承,代码执行后,s所指向的对象”hello”没有改变.不过s不指向s,而是指向了另外一个String.原来的对象还在内存中,只是不指向了.

String s1 = “abc”; 
String s2 = “abc”; 
System.out.println(s1 == s2); 
A:true,均指向常量池中对象。

 

String s1 = new String(“abc”); 
String s2 = new String(“abc”); 
System.out.println(s1 == s2); 
A:false,两个引用指向堆中的不同对象。

 

饿了,一会再说。先吃饱

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值