JAVA基础理解(四)

1.深拷贝和浅拷贝的区别是什么?

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。

深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而那些引用其他对象的变量将指向被复制过的新对象。而不再是原有的那些被引用的对象。换言之。深拷贝把要复制的对象所引用的对象都复制了一遍。

2.String是基本数据类型吗?

基本数据类型包括:

  • byte short int long char boolean float double

    java.lang.String 类 是final 类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

3.static的用法

Static 可以修饰内部类、方法、变量、代码块

Static 修饰的类是静态内部类

Static 修饰的方法是静态方法,表示该方法属于当前类的,而不是属于某个对象的,静态方法不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。

Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类时,只为静态分配一次内存。

Static修饰的代码块叫静态代码块,通常用来做程序优化的,静态代码块中的代码在整个类加载时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。

4.什么是值传递和引用传递

对象被值传递,意味着传递了对象的一个副本,因此,就算是改变了对象副本,也不会影响源对象的值。

对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用,外部对应用对象所做的改变会反映到所有对象上。

5.重载和重写的区别

方法的重载Overloading与重写Overriding是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们就说该方法被重写(Overriding)。子类对象使用这个方法时,将调用子类的定义,对它而言,父类中的定义如同被屏蔽了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。

6.成员变量和局部变量的区别有哪些

1、从语法形式上看,成员变量是属于类的,局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public、private、static等修饰符修饰,而局部变量不能被访问控制修饰符以及static修饰;成员变量和局部变量都能被final所修饰。

2、从变量在内存中存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存。

3、从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。

4、成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。

7.静态方法和实例方法有何不同

静态方法和实例方法的区别主要体现在两个方面:

1、在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式,也就是说,调用静态方法可以无需创建对象。

2、静态方法在访问本类的成员时候,只允许访问静态成员(即静态成员和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。

8.什么是多态?

允许不同类对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

9.多态的优点?

可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形集合体,如圆环,也同样工作。

可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已经存在类的多态性、继承性,一级其他特性的运行和操作,实际上新加子类更容易获得多态功能。

10.多态存在的三个必要条件?

1、要有继承

2、要有方法的重写

3、父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态链接)

11.TreeMap、HashMap、LinkedHashMap的区别

LinkedHashMap 可以保证HashMap集合的有序。存入的顺序和取出的顺序一致。TreeMap实现了SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序的,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排序过的。HashMap,不保证顺序,即无序,具有很快的访问速度,HashMap最多只允许一条记录的键为null;允许多条记录的值为Null;HashMap不支持线程的同步。

12.Java(OOP)面向对象的特征有哪些方面?

1)抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为和细节是什么。

2)继承:继承是从已有类得到继承创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。

3)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面相对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装,可以说,封装就是隐藏一切可隐藏的东西,指向外界提供最简单的编程接口。

4)多态性:多态性是指允许不同子类型的对象对同一消息做出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态的运行时多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多重提供服务的方式,但一切对A系统来说都是透明的。方法重载(Overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面相对象最精髓的东西,要实现多态需要做两件事:1.方法重写(子类继承父类并重写父类中已有的或抽象的方法);2.对象造型(用父类引用应用子类型对象,这样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值