Java基础知识10题(第二天)

11.Java面向过程的三大特性:封装、继承、多态

封装

封装把一个对象的属性私有化,同时提供一些可以被外部访问的属性和方法,如果属性不想被外界访问, 我们就不需要提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类没有什么意义

继承

继承是使用已存在作为基础建立新类的技术,新类的定义可以增加新的属性或者功能,也可以用父类的功能,但不能选择性的继承父类。通过使用继承我们能够非常方便地复用以前的代码。

  • 子类拥有父类所有的属性和方法(包括私有属性、私有方法),但是无法访问父类中私有属性和私有方法。
  • 子类可以拥有自己的属性和方法,在父类的基础上进行扩展
  • 子类可以用自己的方式实现父类的方法(重写)
多态

所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量(A)到底会指向哪个类的实例对象(B),该引用变量(A)发出的方法调用到底是调用哪个类中实现的方法,必须在程序运行期间才知道。

  • 方法的多态性体现在:方法的重载过程。方法传递不同的参数就可以调用同一方法接口实现不同的功能
  • 对象的多态性体现在:向上转型和向下转型
    1.向上转型:父类对象通过子类对象去实例化,实际上就是对象的对象的向上转型,期间不需要强制扎强制转换,但是可能会丢失精度,这个过程是自动完成的。
    2.向下转型:父类对象可以装换为子类对象,但是必须通过强制转换

12. String StringBufferStringBuilder 的区别是什么? String为什么是不可变的?

可变性

String类中使用final关键字修饰字符数组来保存字符串private final char value[]
所以String对象是不可变的。而StringBuilderStringBuffer都继承自AbstractBuilder类,在AbstractBuilder中也是使用字符数组来保存字符串char [] value 但是没有使用final关键字修饰,所以这两个对象是可变的。

线程安全性

String中的对象是不可变的,也可以理解为常量,线程安全。
StringBuffer添加了同步锁或者对调用的方法加了同步锁,线程安全
StringBuilder并没有添加同步锁,非线程安全。

性能

每次对String类进行改变的时候,都会生成新的String对象,然后将指针指向新的String对象。
StringBuffer每次都会对StringBuffer本身进行操作,而不是生成新的对象并且改变对象引用。相同的情况下StringBuilder由于是非线程安全的,性能提升了10%-15%

总结:

1.操作少量的数据使用String
2.单线程操作缓冲区下操作大量数据:StringBuilder
3.多线程线程操作缓冲区下操作大量数据:StringBuffer

13.自动装箱与自动拆箱

- 装箱:基本类型->引用类型包装起来
- 拆箱:包装类->基本数据类型

14.在一个静态方法内调用一个非静态成员为什么是非法的?

由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非晶态方法,也不可以访问非静态变量成员

15.在Java中定义无参构造的作用

Java程序在执行子类的构造方法前,如果没有用super()来调用父类的特定的构造方法,则会调用父类的"无参构造"。因此,如果父类中只定义了有参构造(A),而在子类的构造函数又没有使用super()来调用父类中特定的构造方法(A),则会发生编译的时候会发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法就是在父类中定义一个无参构造。

16.import java和java有什么区别?

刚开始的时候JavaAPI所需要的包是java开头的包,javax当时只是扩展API包来使用。然而随着时间的推移,javax逐渐扩展为Java API 的组成部分。但是,将扩展包从javax包移植到java包确实太麻烦了,最终javax包成为标准API的一部分,
两者之间实际上没有区别*。

17.接口和抽象类区别是什么(针对JDK8而言)?

Java基础知识10题(第二天)_第1张图片
针对JDK8而言

补充:从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范

抽象类必须要有抽象方法吗?

抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。

抽象类能使用 final 修饰吗?

抽象类不能用 final 来修饰。当用 final 修饰一个类时,表明这个类不能被继承。 final 类中的所有成员方法都会被隐式地指定为 final 方法,这明显违背了抽象类存在的意义了。

18.成员变量与局部变量的区别有哪些?

Java基础知识10题(第二天)_第2张图片
成员变量和局部变量的区别

19.创建一个对象用什么运算符?对象实体与对象引用有何不同?

new运算符,new创建对象实例(存在堆内存中),对象引用指向对象实例(对象引用存放在栈中)。一个对象引用可以指向0个或者1个对象(一根绳子可以不系气球也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球)。

20.什么是方法的返回值?返回值在类的方法里面有什么作用?

方法的返回值是指=某个方法体中的代码执行后产生的结果(前提是能有返回值)。返回值的作用是接收出结果,使得它可以进行其他的操作!

你可能感兴趣的:(Java基础知识10题(第二天))