Java面试问题知识点总结

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大),喜欢的朋友可以参考下。

1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么?

(1)boolean

boolean数据类型非true即false。这个数据类型表示1 bit的信息,但是它的大小并没有精确定义。

《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型单独使用是4个字节,在数组中又是1个字节。那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗?实际上,使用int的原因是,对于当下32位的CPU来说,一次进行32位的数据交换更加高效。

综上,我们可以知道:官方文档对boolean类型没有给出精确的定义,《Java虚拟机规范》给出了“单独时使用4个字节,boolean数组时1个字节”的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是一种时空权衡。

    boolean类型的封装类是Boolean。

(2)byte——1 byte——Byte

(3)short——2 bytes——Short

(4)int——4 bytes——Integer

(5)long——8 bytes——Long

(6)float——4 bytes——Float

(7)double——8 bytes——Double

(8)char——2 bytes——Character

2. 谈一谈”==“与”equals()"的区别。

《Think in Java》中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。

"=="判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用类型变量存储的是引用);equals是Object类的方法,Object对它的实现是比较内存地址,我们可以重写这个方法来自定义“相等”这个概念。比如类库中的String、Date等类就对这个方法进行了重写。

综上,对于枚举类型和原始数据类型的相等性比较,应该使用"==";对于引用类型的相等性比较,应该使用equals方法。

3. Java中的四种引用及其应用场景是什么?

强引用: 通常我们使用new操作符创建一个对象时所返回的引用即为强引用

软引用: 若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回收,可用于图片缓存中,内存不足时系统会自动回收不再使用的Bitmap

弱引用: 若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充足),同样可用于图片缓存中,这时候只要Bitmap不再使用就会被回收

虚引用: 虚引用是Java中最“弱”的引用,通过它甚至无法获取被引用的对象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列中,这样我们可以知道它指向的对象何时被销毁。

4. object中定义了哪些方法?

clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()

5. hashCode的作用是什么?

请参见散列表的基本原理与实现

6. ArrayList, LinkedList, Vector的区别是什么?

ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大小

LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问

Vector: 可以看作线程安全版的ArrayList

7. String, StringBuilder, StringBuffer的区别是什么?

String: 不可变的字符序列,若要向其中添加新字符需要创建一个新的String对象

StringBuilder: 可变字符序列,支持向其中添加新字符(无需创建新对象)

StringBuffer: 可以看作线程安全版的StringBuilder

8. Map, Set, List, Queue、Stack的特点及用法。

Map<K, V>:  Java中存储键值对的数据类型都实现了这个接口,表示“映射表”。支持的两个核心操作是get(Object key)以及put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。

Set<E>: 实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义上的“集合”。它所支持的核心操作有add(E e),remove(Object o), contains(Object o),分别用于添加元素,删除元素以及判断给定元素是否存在于集中。

List<E>: Java中集合框架中的列表类型都实现了这个接口,表示一种有序序列。支持get(int index), add(E e)等操作。

Queue<E>: Java集合框架中的队列接口,代表了“先进先出”队列。支持add(E element), remove()等操作。

Stack<E>: Java集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数据结构。支持push(E item), pop()等操作。

更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算法导论》或其他相关书籍。

9. HashMap和HashTable的区别

HashTable是线程安全的,而HashMap不是

HashMap中允许存在null键和null值,而HashTable中不允许

更加详细的分析请参考深入解析HashMap、HashTable

10. HashMap的实现原理

简单的说,HashMap的底层实现是“基于拉链法的散列表”。详细分析请参考深入解析HashMap、HashTable

11. ConcurrentHashMap的实现原理

ConcurrentHashMap是支持并发读写的HashMap,它的特点是读取数据时无需加锁,写数据时可以保证加锁粒度尽可能的小。由于其内部采用“分段存储”,只需对要进行写操作的数据所在的“段”进行加锁。关于ConcurrentHashMap底层实现的详细分析请参考Java并发编程:并发容器之ConcurrentHashMap

12. TreeMap, LinkedHashMap, HashMap的区别是什么?

HashMap的底层实现是散列表,因此它内部存储的元素是无序的;

TreeMap的底层实现是红黑树,所以它内部的元素的有序的。排序的依据是自然序或者是创建TreeMap时所提供的比较器(Comparator)对象。

LinkedHashMap能够记住插入元素的顺序。

更加详细的说明请参考HashMap,LinkedMap,TreeMap的区别

13. Collection与Collections的区别是什么?

Collection<E>是Java集合框架中的基本接口;Collections是Java集合框架提供的一个工具类,其中包含了大量用于操作或返回集合的静态方法。

对Java集合框架还不太熟悉的小伙伴请参考Java核心技术点之集合框架

14. 对于“try-catch-finally”,若try语句块中包含“return”语句,finally语句块会执行吗?

答案是会执行。只有两种情况finally块中的语句不会被执行:

调用了System.exit()方法;

JVM“崩溃”了。

15. Java中的异常层次结构

Java中的异常层次结构如下图所示:

我们可以看到Throwable类是异常层级中的基类。Error类表示内部错误,这类错误使我们无法控制的;Exception表示异常,RuntimeException及其子类属于未检查异常,这类异常包括ArrayIndexOutOfBoundsException、NullPointerException等,我们应该通过条件判断等方式语句避免未检查异常的发生。IOException及其子类属于已检查异常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没有则会报错。对于未检查异常,我们无需捕获(当然Java也允许我们捕获,但我们应该做的事避免未检查异常的发生)。

16. Java面向对象的三个特征与含义

三大特征:封装、继承、多态。详细介绍请戳Java面向对象三大特性

17. Override, Overload的含义与区别

Override表示“重写”,是子类对父类中同一方法的重新定义

Overload表示“重载”,也就是定义一个与已定义方法名称相同但签名不同的新方法

18. 接口与抽象类的区别

接口是一种约定,实现接口的类要遵循这个约定;抽象类本质上是一个类,使用抽象类的代价要比接口大。接口与抽象类的对比如下:

抽象类中可以包含属性,方法(包含抽象方法与有着具体实现的方法),常量;接口只能包含常量和方法声明。

抽象类中的方法和成员变量可以定义可见性(比如public、private等);而接口中的方法只能为public(缺省为public)。

一个子类只能有一个父类(具体类或抽象类);而一个接口可以继承一个多个接口,一个类也可以实现多个接口。

子类中实现父类中的抽象方法时,可见性可以大于等于父类中的;而接口实现类中的接口 方法的可见性只能与接口中相同(public)。

19. 静态内部类与非静态内部类的区别

静态内部类不会持有外围类的引用,而非静态内部类会隐式持有外围类的一个引用。

欲进一步了解内部类,请戳Java核心技术点之内部类

20. Java中多态的实现原理

所谓多态,指的就是父类引用指向子类对象,调用方法时会调用子类的实现而不是父类的实现。多态的实现的关键在于“动态绑定”。详细介绍请戳Java动态绑定的内部实现机制

21. 简述Java中创建新线程的两种方法

继承Thread类(假设子类为MyThread),并重写run()方法,然后new一个MyThread对象并对其调用start()即可启动新线程。

实现Runnable接口(假设实现类为MyRunnable),而后将MyRunnable对象作为参数传入Thread构造器,在得到的Thread对象上调用start()方法即可。

22. 简述Java中进行线程同步的方法

volatile: Java Memory Model保证了对同一个volatile变量的写happens before对它的读;

synchronized: 可以来对一个代码块或是对一个方法上锁,被“锁住”的地方称为临界区,进入临界区的线程会获取对象的monitor,这样其他尝试进入临界区的线程会因无法获取monitor而被阻塞。由于等待另一个线程释放monitor而被阻塞的线程无法被中断。

ReentrantLock:  尝试获取锁的线程可以被中断并可以设置超时参数。

更加详细的介绍请戳Java核心技术点之多线程

23. 简述Java中具有哪几种粒度的锁

Java中可以对类、对象、方法或是代码块上锁。更加详细的介绍请戳Java核心技术点之多线程

24. 给出“生产者-消费者”问题的一种解决方案

使用阻塞队列:

public class BlockingQueueTest {
 private int size = 20;
 private ArrayBlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(size);
 public static void main(String[] args) {
 BlockingQueueTest test = new BlockingQueueTest();
 Producer producer = test.new Producer();
 Consumer consumer = test.new Consumer();
 producer.start();
 consumer.start();
 }
 class Consumer extends Thread{
 @Override
 public void run() {
 while(true){
 try {
 //从阻塞队列中取出一个元素
 queue.take();
 System.out.println("队列剩余" + queue.size() + "个元素");
 } catch (InterruptedException e) {

 }
 }
 }
 }
 class Producer extends Thread{
 @Override
 public void run() {
 while (true) {
 try {
 //向阻塞队列中插入一个元素
 queue.put(1);
 System.out.println("队列剩余空间:" + (size - queue.size()));
 } catch (InterruptedException e) {
 }
 }
 }
 }
}

25. ThreadLocal的设计理念与作用

ThreadLocal的作用是提供线程内的局部变量,在多线程环境下访问时能保证各个线程内的ThreadLocal变量各自独立。也就是说,每个线程的ThreadLocal变量是自己专用的,其他线程是访问不到的。ThreadLocal最常用于以下这个场景:多线程环境下存在对非线程安全对象的并发访问,而且该对象不需要在线程间共享,但是我们不想加锁,这时候可以使用ThreadLocal来使得每个线程都持有一个该对象的副本。

关于ThreadLocal的实现原理分析请戳深入剖析ThreadLocal

26. concurrent包的整体架构

27. ArrayBlockingQueue, CountDownLatch类的作用

CountDownLatch:  允许线程集等待直到计数器为0。适用场景: 当一个或多个线程需要等待指定数目的事件发生后再继续执行。

ArrayBlockingQueue:  一个基于数组实现的阻塞队列,它在构造时需要指定容量。当试图向满队列中添加元素或者从空队列中移除元素时,当前线程会被阻塞。通过阻塞队列,我们可以按以下模式来工作:工作者线程可以周期性的将中间结果放入阻塞队列中,其它线程可以取出中间结果并进行进一步操作。若工作者线程的执行比较慢(还没来得及向队列中插入元素),其他从队列中取元素的线程会等待它(试图从空队列中取元素从而阻塞);若工作者线程执行较快(试图向满队列中插入元素),则它会等待其它线程取出元素再继续执行。

28. wait(),sleep() 的区别

wait():  Object类中定义的实例方法。在指定对象上调用wait方法会让当前线程进入等待状态(前提是当前线程持有该对象的monitor),此时当前线程会释放相应对象的monitor,这样一来其它线程便有机会获取这个对象的monitor了。当其它线程获取了这个对象的monitor并进行了所需操作时,便可以调用notify方法唤醒之前进入等待状态的线程。

sleep():  Thread类中的静态方法,作用是让当前线程进入休眠状态,以便让其他线程有机会执行。进入休眠状态的线程不会释放它所持有的锁。

29. 线程池的用法与优势

优势:  实现对线程的复用,避免了反复创建及销毁线程的开销;使用线程池统一管理线程可以减少并发线程的数目,而线程数过多往往会在线程上下文切换上以及线程同步上浪费过多时间。

用法:  我们可以调用ThreadPoolExecutor的某个构造方法来自己创建一个线程池。但通常情况下我们可以使用Executors类提供给我们的静态工厂方法来更方便的创建一个线程池对象。创建了线程池对象后,我们就可以调用submit方法提交任务到线程池中去执行了;线程池使用完毕后我们要记得调用shutdown方法来关闭它。

关于线程池的详细介绍以及实现原理分析请戳深入理解Java之线程池

30. for-each与常规for循环的效率对比

关于这个问题我们直接看《Effective Java》给我们做的解答:

for-each能够让代码更加清晰,并且减少了出错的机会。下面的惯用代码适用于集合与数组类型:

 for (Element e : elements) {
 doSomething(e);
}

使用for-each循环与常规的for循环相比,并不存在性能损失,即使对数组进行迭代也是如此。实际上,在有些场合下它还能带来微小的性能提升,因为它只计算一次数组索引的上限。

31. 简述Java IO与NIO的区别

Java IO是面向流的,这意味着我们需要每次从流中读取一个或多个字节,直到读取完所有字节;NIO是面向缓冲的,也就是说会把数据读取到一个缓冲区中,然后对缓冲区中的数据进行相应处理。

Java IO是阻塞IO,而NIO是非阻塞IO。

Java NIO中存在一个称为选择器(selector)的东西,它允许你把多个通道(channel)注册到一个选择器上,然后使用一个线程来监视这些通道:若这些通道里有某个准备好可以开始进行读或写操作了,则开始对相应的通道进行读写。而在等待某通道变为可读/写期间,请求对通道进行读写操作的线程可以去干别的事情。

更进一步的说明请戳Java NIO与IO

32. 反射的作用与原理

反射的作用概括地说是运行时获取类的各种定义信息,比如定义了哪些属性与方法。原理是通过类的class对象来获取它的各种信息。

详细介绍请参见Java核心技术点之反射

33. Java中的泛型机制

关于泛型机制的详细介绍请直接戳Java核心技术点之泛型

34. Java 7与Java 8的新特性

这里有两篇总结的非常好的:Java 7的新特性    Java 8的新特性

35. 常见设计模式

所谓“设计模式”,不过是面向对象编程中一些常用的软件设计手法,并且经过实践的检验,这些设计手法在各自的场景下能解决一些需求,因此它们就成为了如今广为流传的”设计模式“。也就是说,正式因为在某些场景下产生了一些棘手的问题,才催生了相应的设计模式。明确了这一点,我们在学习某种设计模式时要充分理解它产生的背景以及它所解决的主要矛盾是什么。

常用的设计模式可以分为以下三大类:

创建型模式:  包括工厂模式(又可进一步分为简单工厂模式、工厂方法模式、抽象工厂模式)、建造者模式、单例模式。

结构型模式:  包括适配器模式、桥接模式、装饰模式、外观模式、享元模式、代理模式。

行为型模式:  包括命令模式、中介者模式、观察者模式、状态模式、策略模式。

关于每个模式具体的介绍请参考图说设计模式

36. JNI的基本用法

关于JNI,这里有篇好文:Android中的JNI

37. 动态代理的定义、应用场景及原理

关于动态代理,请直接参见Java核心技术点之动态代理

38. 注解的基本概念与使用

注解可以看作是“增强版的注释”,它可以向编译器、虚拟机说明一些事情。

注解是描述Java代码的代码,它能够被编译器解析,注解处理工具在运行时也能够解析注解。注解本身是“被动”的信息,只有主动解析它才有意义。

除了向编译器/虚拟机传递信息,我们也可以使用注解来生成一些“模板化”的代码。

上面问题只是JAVA常见问题,要想在JAVA这条道路上走的更远,还需要我们不断的钻研学习,希望各位朋友会喜欢

(0)

相关推荐

  • Java知识点归纳 —给Java新手的一些建议(新手必看)

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

  • Java final 修饰符知识点总结(必看篇)

    final从字面上理解含义为"最后的,最终的".在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. final修饰类: final修饰类即表示此类已经是"最后的.最终的"含义.因此,用final修饰的类不能被继承,即不能拥有自己的子类. 如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误. 2. final修饰方法: final修饰的方法表示此方法已经是&

  • 浅谈Java线程并发知识点

    发布:一个对象是使它能够被当前范围之外的代码所引用: 常见形式:将对象的的引用存储到公共静态域:非私有方法中返回引用:发布内部类实例,包含引用. 逃逸:在对象尚未准备好时就将其发布. 不要让this引用在构造函数中逸出.例,在构造函数中启动线程,线程会包含对象的引用. 同步容器:对容器的所有状态进行穿行访问,Vector.Hashtable,Cllections.synchronizedMap|List 并发容器:ConcurrentHashMap,CopyOnWriteArrayList,Co

  • Java中面向对象的知识点总结

    一.对象和类的概念 类:对具有相同属性和方法的一类事物的抽象. 对象:具体的某一事物,代表自身的一些属性和方法. 二.类(对象)之间的关系 关联(组合.聚合),继承,依赖.实现 三.面向对象设计思想 面向对象--->考虑哪些类,对象--->类和对象有属性.方法----->类和类之间的关系 四.重载.重写和隐藏 1). 重载(overload): 方法重载就是多个方法名称相同但是参数类型或者参数个数不同的方法,与返回值类型和修饰符无关 class Test { public int tes

  • 基于java集合中的一些易混淆的知识点(详解)

    (一) collection和collections 这两者均位于java.util包下,不同的是: collection是一个集合接口,有ListSet等常见的子接口,是集合框架图的第一个节点,,提供了对集合对象进行基本操作的一系列方法. 常见的方法有: boolean add(E e) 往容器中添加元素:int size() 返回collection的元素数:boolean isEmpty() 判断此容器是否为空: boolean contains(Object o) 如果此collecti

  • Java面试问题知识点总结

    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结(阅读本文需要有一定的Java基础:若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大),喜欢的朋友可以参考下. 1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? (1)boolean boolean数据类型非true即false.这个数据类型表示1 bit的信息,但是它的大小并没有精确定义. <Java虚拟机规范>中如是说:"虽然定义了boolean这

  • 详解Java面试官最爱问的volatile关键字

    本文向大家分享的主要内容是Java面试中一个常见的知识点:volatile关键字.本文详细介绍了volatile关键字的方方面面,希望大家在阅读过本文之后,能完美解决volatile关键字的相关问题.  在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来,深入地话还可以考察JVM底层实现以及操作系统的相关知识. 下面我们以一次假想的面试过

  • Java面试之动态规划与组合数

    最近在刷力扣上的题目,刷到了65不同路径,当初上大学的时候,曾在hihocoder上刷到过这道题目,但是现在已经几乎全忘光了,大概的知识点是动态规划,如今就让我们一起来回顾一下. 从题目说起 题目原文是: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为"Finish"). 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格.有多少可能

  • Java面试最容易被刷的重难点之锁的使用策略

    目录 一. 乐观锁和悲观锁 1. 字面理解 2. 生活实例 3. 基于版本号方式实现乐观锁 二. 读写锁 1. 理解 2. 用法 三. 重量级锁和轻量级锁 1. 原理 2. 理解 3. 区分用户态和内核态 四. 自旋锁 1. 理解 2. 实现方式 3. 优缺点 五. 公平锁和非公平锁 1. 理解 2. 注意事项 六. 可重入锁和不可重入锁 1. 为什么要引入这两把锁 (1)实例一 (2)实例二 2. 实现方案 七. 面试题 第一题 第二题 第三题 第四题 在多线程的学习中,很多时候都要用到锁,但

  • Java面试为何阿里强制要求不在foreach里执行删除操作

    小二听完就面露喜色,因为两年前,也就是 2021 年,他在<Java 程序员进阶之路>专栏上的第 63 篇看到过这题

  • java面试常见问题之Hibernate总结

    主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检索策略是什么,分别适用于哪种场合,ORM解决的不匹配问题, Hibernate映射继承关系的3种方式,Session的find()方法以及Query接口的区别等方面问题的总结,具体内容如下: 1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使

  • Java SPI 机制知识点总结

    前言 不知大家现在有没有去公司复工,我已经在家办公将近 3 周了,同时也在家呆了一个多月:还好工作并没有受到任何影响,我个人一直觉得远程工作和 IT 行业是非常契合的,这段时间的工作效率甚至比在办公室还高,同时由于我们公司的业务在海外,所以疫情几乎没有造成太多影响. 扯远了,这次主要是想和大家分享一下 Java 的 SPI 机制. 还没看过的朋友的我先做个前景提要,当时的需求: 我实现了一个类似于的 SpringMVC 但却很轻量的 http 框架 cicada,其中当然也需要一个 IOC 容器

  • Java中equals()知识点总结

    经过几天的学习,终于对equals的用法有了比较全面的认识,并做一个总结. 1.equals的本意--即在Object对象中定义的equals()方法有什么样的意义. (此处先附上==的作用,后面仍有叙述.因为==和equals()方法的关系是很密切的,后面有我自己的看法. ==用于比较引用和比较基本数据类型时具有不同的功能: 比较基本数据类型,如果两个值相同,则结果为true 而在比较引用时,如果引用指向内存中的同一对象,结果为true) public boolean equals(Objec

  • Java关键字volatile知识点总结

    volatile是什么 volatile关键字是Java提供的一种轻量级同步机制.它能够保证可见性和有序性,但是不能保证原子性 可见性 对于volatile的可见性,先看看这段代码的执行 flag默认为true 创建一个线程A去判断flag是否为true,如果为true循环执行i++操作两秒后,创建另一个线程B将flag修改为false 线程A没有感知到flag已经被修改成false了,不能跳出循环 这相当于啥呢?相当于你的女神和你说,你好好努力,年薪百万了就嫁给你,你听了之后,努力赚钱.3年之

  • java super关键字知识点详解

    在对一些父类的调用上,我们需要借助java中的关键字使用,这就是super关键字,可以归纳为三种方法:作用于类.方法名和构造函数.可以把它看做是使用父类的一个工具,相信大家在之前类的使用中有所接触.下面我们就super的说明.三种用法.注意事项进行说明,然后在实例中体会用法. 1.说明 super相当于是指代当前的对象的父类,调用父类的属性.方法和构造方法 2.用法 (1)super.变量/对象名: 使用这种方法可以直接访问父类中的变量或对象,进行修改赋值等操作 (2)super.方法名():

随机推荐