Java基本知识点(适合面试)
- 格式:doc
- 大小:62.50 KB
- 文档页数:8
java应届生面试题一、基础知识1. 什么是Java?Java是一种广泛使用的高级编程语言,最初由Sun Microsystems于1995年发布。
2. Java的特点有哪些?- 跨平台性:Java可以在不同的操作系统上运行。
- 面向对象:Java支持面向对象的编程模式。
- 垃圾回收:Java提供自动垃圾回收机制,简化内存管理。
- 强类型:Java是一种静态类型语言,要求变量在使用前必须声明其类型。
- 多线程:Java提供多线程支持,方便开发多任务应用程序。
3. 解释 Java 程序的结构。
Java程序由类组成。
每个Java程序都包含一个包含main方法的类作为入口点。
4. Java中的基本数据类型有哪些?Java的基本数据类型包括byte、short、int、long、float、double、boolean和char。
5. 解释封装性在Java中的含义。
封装是一种面向对象的编程概念,用于隐藏对象的内部细节,并仅公开必要的接口供外部访问。
二、面向对象1. 什么是面向对象编程(OOP)?面向对象编程是一种编程范式,将数据(属性)和操作(方法)封装为对象。
它的核心概念包括封装、继承和多态。
2. 解释继承在Java中的作用。
继承是一种面向对象的概念,允许新创建的类获取已存在类的属性和方法。
通过继承,子类可以重用父类的代码。
3. 什么是多态性?多态性是指同一个方法名可以在不同的类中具有不同的实现。
它可以提高代码的可维护性和灵活性。
4. 解释抽象类和接口的区别。
抽象类可以包含抽象方法和具体方法,而接口只能包含抽象方法。
类可以继承一个抽象类,但可以实现多个接口。
三、异常处理1. 什么是异常?Java中如何处理异常?异常是指程序运行时可能发生的错误条件。
Java使用try-catch语句来捕获和处理异常,以防止程序崩溃或产生未知错误。
2. 解释RuntimeException和Checked Exception的区别。
第1篇一、基础知识1. Java简介题目:请简述Java的基本特点。
答案:- 简单易学:Java设计之初就考虑了易学性,使用面向对象编程。
- 原生跨平台:Java通过JVM(Java虚拟机)实现跨平台运行。
- 安全性:Java提供了强大的安全机制,如沙箱安全模型。
- 体系结构中立:Java不依赖于特定的硬件或操作系统。
- 高效:Java的运行速度接近C/C++。
- 多线程:Java内置多线程支持,便于实现并发处理。
- 动态性:Java在运行时可以进行扩展和修改。
2. Java虚拟机题目:请解释Java虚拟机(JVM)的作用。
答案:JVM是Java程序的运行环境,其主要作用包括:- 将Java字节码转换为本地机器码。
- 管理内存,包括堆、栈、方法区等。
- 提供垃圾回收机制。
- 管理线程和同步。
3. Java内存模型题目:请简述Java内存模型的组成。
答案:Java内存模型主要由以下部分组成:- 堆(Heap):存储对象实例和数组。
- 栈(Stack):存储局部变量和方法调用。
- 方法区(Method Area):存储类信息、常量、静态变量等。
- 本地方法栈(Native Method Stack):存储本地方法调用的相关数据。
- 程序计数器(Program Counter Register):存储线程的当前指令地址。
4. Java关键字题目:请列举并解释Java中的几个关键字。
答案:- `public`:表示访问权限为公开。
- `private`:表示访问权限为私有。
- `protected`:表示访问权限为受保护。
- `static`:表示属于类本身,而非对象实例。
- `final`:表示常量或方法不能被修改。
- `synchronized`:表示线程同步。
- `transient`:表示数据在序列化时不会被持久化。
二、面向对象编程5. 类和对象题目:请解释类和对象之间的关系。
答案:类是对象的模板,对象是类的实例。
第1篇一、Java基础知识1. 请简述Java语言的特点。
2. 什么是Java虚拟机(JVM)?它有什么作用?3. 什么是Java的内存模型?请解释Java内存模型中的几个关键概念:堆、栈、方法区、程序计数器、本地方法栈。
4. 什么是Java中的反射机制?请举例说明反射在Java中的应用。
5. 什么是Java中的泛型?请解释泛型的原理和作用。
6. 请简述Java中的四种访问控制符:public、protected、default、private。
7. 什么是Java中的继承和多态?请举例说明继承和多态在实际开发中的应用。
8. 什么是Java中的封装?请举例说明封装在实际开发中的应用。
9. 什么是Java中的接口和抽象类?它们之间有什么区别?10. 什么是Java中的异常处理?请解释try-catch-finally语句的执行顺序。
二、Java集合框架1. 请列举Java集合框架中的常用集合类及其特点。
2. 请简述ArrayList、LinkedList、HashMap、HashSet的区别。
3. 什么是Java中的泛型集合?请举例说明泛型集合的应用。
4. 什么是Java中的迭代器(Iterator)和枚举器(Enum)?请比较它们的区别。
5. 什么是Java中的List、Set、Map的遍历方法?6. 请解释Java中的ArrayList和LinkedList的内部实现原理。
7. 什么是Java中的HashMap的扩容机制?8. 什么是Java中的HashSet的内部实现原理?9. 请解释Java中的线程安全集合类,如CopyOnWriteArrayList、ConcurrentHashMap。
三、Java多线程与并发1. 什么是Java中的线程?请解释线程的创建、调度和同步。
2. 请简述Java中的线程状态,如新建、就绪、运行、阻塞、等待、超时等待、终止。
3. 什么是Java中的同步机制?请解释synchronized关键字的作用。
第1篇一、Java基础知识1. 请简述Java的基本特点。
解析:Java具有“一次编写,到处运行”的特点,具有跨平台性;具有简单易学、面向对象、分布式、解释型、健壮性、安全性、体系结构中立、多线程、动态性等特点。
2. 什么是JVM?请简述JVM的作用。
解析:JVM(Java虚拟机)是运行所有Java应用程序的虚拟机。
它的作用是执行Java字节码,为Java程序提供运行环境,保证Java程序跨平台运行。
3. 请简述Java中的四种访问控制符及其作用。
解析:- public:表示公开的访问控制符,可以在任何地方访问。
- private:表示私有的访问控制符,只能在类内部访问。
- protected:表示受保护的访问控制符,可以在类内部和子类中访问。
- default(无修饰符):表示默认的访问控制符,只能在本包内访问。
4. 什么是封装?请举例说明。
解析:封装是将类的属性和行为封装在一起,对外只提供有限的接口。
例如,一个学生类,包含姓名、年龄、性别等属性,以及学习、休息等方法。
5. 什么是继承?请举例说明。
解析:继承是子类继承父类的方法和属性。
例如,一个动物类,包含行走、吃食等方法,一个猫类继承自动物类,则猫类具有行走、吃食等方法。
6. 什么是多态?请举例说明。
解析:多态是指同一个方法在不同对象上有不同的行为。
例如,一个形状类,包含计算面积的方法,一个圆形和正方形类继承自形状类,计算面积的方法在圆形和正方形类中有不同的实现。
7. 什么是接口?请举例说明。
解析:接口是一种规范,定义了类应该具有的方法,但不提供具体实现。
例如,一个Comparable接口,定义了compareTo方法,用于比较两个对象的大小。
8. 什么是泛型?请举例说明。
解析:泛型是一种类型参数化技术,可以在编译时进行类型检查,提高代码的安全性。
例如,一个List<T>泛型集合,可以存储任意类型的元素。
二、Java集合框架1. 请简述Java集合框架中的常用类及其特点。
java面试题基础篇当涉及Java 面试的基础篇时,以下是一些常见的问题和主题,供你进行复习和准备:1. Java 基础:-什么是Java 编程语言?Java 的特点是什么?- Java 的数据类型有哪些?基本数据类型和引用数据类型有什么区别?-解释一下Java 的封装、继承和多态。
-什么是类和对象?如何创建类和对象?-什么是构造方法?它有什么作用?-什么是方法重载和方法重写?-解释一下静态变量和实例变量的区别。
-什么是接口和抽象类?它们之间的区别是什么?2. 面向对象设计:-什么是SOLID 原则?分别解释每个原则的含义。
-什么是设计模式?举例说明几个常用的设计模式。
-什么是单例模式?如何实现线程安全的单例模式?-什么是工厂模式和抽象工厂模式?3. 异常处理:-什么是异常?Java 中的异常处理机制是什么?-解释一下try-catch-finally 块的工作原理。
-什么是运行时异常和受检异常?4. 集合框架:-介绍Java 的集合框架。
ArrayList 和LinkedList 的区别是什么?-什么是Map 接口?HashMap 和TreeMap 的区别是什么?-什么是迭代器?如何使用迭代器遍历集合?5. 线程与并发:-什么是线程?如何创建和启动一个线程?-解释一下同步和异步,阻塞和非阻塞。
-什么是线程安全?如何避免线程安全问题?-什么是死锁?如何避免死锁?6. IO 操作:-什么是输入流和输出流?-解释一下字节流和字符流的区别。
-什么是序列化和反序列化?7. Java 虚拟机(JVM):-什么是JVM?JVM 的主要组成部分是什么?-什么是垃圾回收?Java 中的垃圾回收机制是什么?8. 基础算法和数据结构:-解释一下栈和队列。
-什么是哈希表(HashTable)?如何解决哈希冲突?-什么是递归?递归的应用和注意事项是什么?这只是一些常见的Java 面试基础题目,你可以根据实际情况进行深入的学习和准备。
java面试基础知识点Java是一门非常流行的编程语言,它可以用来开发各种类型的应用程序,包括使用其他语言开发的那些手机应用程序。
面对Java 的开发者,有相当多的基础知识需要掌握。
下面就是一些Java面试时最常被考查的一些基础知识点。
1.Java语言的特性Java语言的特性是编程的基础,因此考生需要掌握Java语言的语法、变量、控制结构、数据类型等基本概念。
Java语言具有可移植性。
它可以在任何支持java运行环境(JVM)的设备上运行,不管是PC还是移动设备。
这一特性使Java成为非常有用的编程语言,同时也让它在企业应用中受到极大欢迎。
2.Java基本开发技术考生应该能够熟练掌握Java基本开发技术,包括Java语言的语法, Java类库、Java程序设计以及Java应用开发技术等。
例如,Java语言的语法包括关键字、变量、数据类型、控制结构、运算符等;而Java类库则指标准类库、自定义类库等;Java程序设计是指设计模式、调试技术等;而Java应用开发技术指软件工程方法、开发框架等。
3.集成开发工具集成开发工具是用来提高开发效率的工具,考生在面试时也应当能够掌握相关的知识。
常见的集成开发工具有Eclipse、IntelliJ IDEA、NetBeans等。
这些集成开发工具都有自己的优缺点,因此考生需要根据自己的需要选择合适的工具。
4.Java虚拟机Java虚拟机是Java程序运行的基础环境,它提供了一个统一的运行环境,使得Java程序可以在任何支持Java虚拟机的平台上运行。
考生需要了解Java虚拟机的工作原理,以及如何在虚拟机上运行Java程序。
5.Java框架Java框架是一种把功能模块组合在一起形成可重用组件的体系结构,是编写程序更高效的重要方式。
考生应该了解如何使用Java 框架来开发应用程序,以及框架的实现原理。
常见的Java框架有Struts、Spring、Hibernate等。
java 50w字面试宝典Java 50万字面试宝典第一章:Java基础知识1.1 Java简介Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。
它的特点包括可移植性、跨平台性和安全性。
Java应用广泛,用于开发各种类型的应用程序,如桌面应用程序、移动应用程序和Web应用程序。
1.2 Java运行环境Java程序在Java虚拟机(JVM)上运行。
JVM是Java的核心组成部分,它负责将Java源代码编译成字节码,并在不同平台上执行。
1.3 Java语法基础Java的语法类似于C++,包括变量、数据类型、运算符、控制语句等。
Java代码由类和方法组成,其中类是Java程序的基本单位。
1.4 Java面向对象编程Java是一种面向对象的编程语言,它支持封装、继承和多态等面向对象的特性。
面向对象编程可以提高代码的可维护性和复用性。
1.5 异常处理Java提供了异常处理机制,可以捕获和处理程序中的异常。
异常处理可以使程序更加健壮,减少程序崩溃的风险。
第二章:Java核心技术2.1 Java集合框架Java集合框架提供了一套类和接口,用于存储和操作数据。
常用的集合类有ArrayList、LinkedList和HashMap等,它们提供了不同的数据结构和操作方法。
2.2 多线程编程Java支持多线程编程,可以同时执行多个任务。
多线程可以提高程序的性能和响应能力,但也需要处理线程同步和共享资源的问题。
2.3 文件和IO操作Java提供了丰富的文件和IO操作类,用于读写文件和处理IO流。
常用的类有File、FileReader和BufferedReader等。
2.4 JDBC数据库操作Java数据库连接(JDBC)是Java访问数据库的标准接口。
通过JDBC,可以连接和操作各种类型的数据库,如MySQL、Oracle和SQL Server等。
第三章:Java高级特性3.1 反射机制Java的反射机制允许程序在运行时获取类的信息,并动态调用类的方法。
在Java面试中,以下是一些核心知识点:
Java基础:包括Java的基本语法、面向对象的概念(如类、对象、继承、多态、封装等)、异常处理、集合框架(如List、Set、Map等)、泛型、流和Lambda 表达式等。
Java语言特性:包括自动拆装箱、枚举、注解、泛型擦除、Lambda表达式和Stream API等。
Java标准库:包括Java标准库中常用的类和接口,如String、StringBuffer、StringBuilder、Math、Random等。
数据结构和算法:包括数组、链表、栈、队列、二叉树等数据结构,以及排序算法(如冒泡排序、选择排序、插入排序等)、查找算法(如二分查找)等。
Java虚拟机(JVM):包括JVM的工作原理、内存模型、垃圾回收机制以及性能调优等。
Java多线程:包括线程的概念、线程的创建和启动方式、线程同步和锁机制(如synchronized关键字和ReentrantLock)等。
Java网络编程:包括TCP/IP协议和UDP/IP协议的基础知识,以及Socket 编程等。
Java Web开发:包括Web应用程序的基本概念,Servlet和JSP的原理和应用,MVC模式等。
Java框架:如Spring的核心概念,AOP的实现方式,以及MyBatis的使用等。
设计模式:如工厂模式、单例模式、观察者模式等常见的设计模式的实现和应用场景。
以上是Java面试中常见的核心知识点,掌握这些知识点有助于提高面试通过率。
2024年Java经典面试题及答案问:Java中的泛型是什么?它有什么作用?答:Java中的泛型是一种参数化类型,它允许使用一个占位符来代表各种类型。
它的作用是在编译时检测类型的一致性,避免了类型转换错误,并提高了代码的重用性。
问:Java中的静态方法和实例方法有什么区别?答:静态方法是属于类的方法,可以在不创建实例对象的情况下被调用,它可以直接通过类名来调用。
实例方法是属于具体实例对象的方法,需要先创建实例对象才能调用。
问:Java中的反射是什么?它有什么用途?答:反射是指在运行状态中,动态获取类的信息并操作类的属性和方法。
它的主要用途是在运行时动态创建对象、访问属性和调用方法,以及在编译时无法确定类型的情况下进行操作。
问:Java中的多线程是什么?如何创建多线程?答:多线程是指在一个程序中同时执行多个线程,每个线程可以独立执行不同的任务。
要创建多线程可以通过继承Thread 类或实现Runnable接口来实现。
问:Java中的异常处理是什么?有哪些常见的异常类型?答:异常处理是指在程序执行过程中处理各种错误或异常情况。
常见的异常类型包括NullPointerException、ArrayIndexOutOfBoundsExcpetion、IOException等。
问:Java中的集合框架是什么?它有哪些常见的接口和类?答:集合框架是Java中用于存储和操作对象的数据结构。
常见的接口包括List、Set、Map等,常见的类包括ArrayList、LinkedList、HashSet、HashMap等。
问:Java中的IO流是什么?它有哪些常见的流类型?答:IO流是用于输入和输出操作的流。
常见的流类型包括字节流和字符流,分别对应InputStream/OutputStream和Reader/Writer。
在Java编程中, IO流是非常重要的一个概念。
IO流是用于将数据从一个地方传输到另一个地方的机制,它允许程序通过输入和输出来访问数据。
java面试基础知识java面试基础知识1、静态变量和实例变量的区别?在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量是属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配内存空间,才可以使用这个实例变量。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会分配内存空间,而且只分配一次,静态变量就可以被使用了。
总之,实例变量必须创建后才可以通过这个对象来使用,静态变量则直接可以使用类名来调用。
2、什么是反射机制?java反射是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法,对于任何一个对象,都能够调用它的任意一个属性和方法,这种动态获取信息以及动态调用对象的方法的功能称为java的反射机制。
3、什么是装箱?什么是拆箱?装箱:自动将基本数据类型转换为包装器类型。
拆箱:自动将包装器类型转换为基本数据类型。
4、Java 中覆盖和重载是什么意思?覆盖(Override)是指子类对父类方法的一种重写,只能比父类抛出更少的异常,访问权限不能比父类的小,被覆盖的方法不能是private的,否则只是在子类中重新定义了一个新方法。
重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同。
java基础知识面试题及答案1、static关键字什么意思?java中是否可以覆盖一个private或者是static的方法?“static”表明一个成员变量或者是成员方法可以在没有所属类的实例变量的情况下访问。
java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法与类的任何实例都不相关。
java中不可以覆盖private方法。
因为private修饰的变量和方法只能在当前类中使用,如果是其他类继承当前类,继承类中是不能访问到private变量和方法的。
1.面向对象的软件开发有哪些优点?1)把软件系统看成是各种对象的集合,这更接近人的思维。
2)软件需求的变动往往是功能的变动,而功能的执行者--对象一般不会有太大的变化。
这使得按照对象设计出来的系统结构比较稳定。
3)对象包括属性和方法,对象把属性和方法的具体实现方式一起封装起来,这使得方法与之相关的属性不再分离,提高每个子系统的相对独立性,从而提高了软件的可维护性。
4)支持封装、继承、多态和抽象,提高了软件的可重用性、可维护性和可扩展性。
2.把一个类放在包里有什么作用?(包的作用)1)能够区分名字相同的类;2)有助于实施访问权限控制;3)有助于划分和组织java应用中的各个类。
3.说出一些常用的类,包,接口,请各举出5个。
Runable,ActionListener,Conllection,Map,Set,List接口1)ng包----包括线程类(Thread)、异常类(Exception)、系统类(System)、整数类(Integer)和字符串类(String)等,这些类是java程序中经常用到的。
2)java.awt包----抽象窗口工具箱包,awt是(Abstract Window Toolkit) 的缩写。
这个包中包含了用于构建GUI界面的类及绘图类。
3)java.io包----输入/输出包,包含各种输入流类和输出流类,如文件输入流类(FileInputStream类)及文件输出流类(FileOutputStream)等。
4)java.util包----提供一些实用类,如日期类(Data)和集合类(Collection)等。
5)包----支持TCP/IP网络协议,包括Socket类及和URL相关的类,这些类都用于网络编程。
除了上面提到的基本包,JDK中还有很多其他包,比如用于数据库编程的java.sql包,用于编写网络程序的java.rmi包(rmi 是“Remote Method Invocation”的缩写)。
另外,javax.*包是对基本包的扩展,包括用于编写GUI的javax.Swing包,以及用于编写声音程序的javax.sound包等。
4. 描述一下你最常用的编程风格。
1)注意编码规则,符合编码要求;2)变量,类等起名要有意义;3)经常格式化代码,注意格式;4)代码中加入测试方法或测试类,尽量提早发现错误;5)代码中要加入注释,为别人和自己将来理解代码带来方便。
5. 说一说标识符的命名规则,以及java的编程规范。
Java标识符的命名规则:1)标识符由字母、数字、下划线“_”、美元符号“$”或者人民币符号“¥”组成,并且首字母不能是数字。
2)不能把关键字和保留字作为标识符。
3)标识符没有长度限制。
4)标识符对大小写敏感。
Java编程规范:1)类名和接口名:首字母大写,其余字母小写。
如SamDoc2)方法名和变量名:首字母小写,其余的字母大写。
如bothEyesOfDoll。
3)包名:字母全部小写。
如,com.abc.dollapp。
4)常量名:采用大写形式,单词之间以下划线“_”隔开。
如DEFAULT_COLOR_DOL。
6.用new关键字的作用是什么?1)为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;2)如果实例变量在声明时被显示初始化,那就把初始化值赋给实例变量;3)调用构造方法;4)返回对象的引用。
7.简述变量的作用域1)成员变量:在类中声明,它的作用域是整个类。
2)局部变量:在一个方法的内部或方法的一个代码块的内部声明。
如果在方法的内部声明,它的作用域是整个方法;如果在一个方法的某个代码块的内部声明,它的作用域是这个代码块。
3)方法参数:方法或者构造方法的参数,它的作用域是整个方法或者构造方法。
4)异常处理的参数:它的作用域是紧跟着catch(Exception e)后的代码块。
8.静态变量和实例变量有什么区别?1)类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类所有实例共享。
静态变量可以直接通过类名被访问。
静态变量的生命周期取决于类的生命周期,当加载类的时候静态变量被创建并分配内存,当卸载类的时候,静态变量被销毁并撤销所在内存。
2)类的每个实例都有相应的实例变量。
每创建一个类的实例,java虚拟机就为实例变量分配一次内存,实例变量位于堆中。
实例变量的生命周期取决于实例的生命周期,当创建实例的时候,实例变量被创建并分配内存,当销毁实例的时候,实例变量被销毁并撤销所在内存。
9.使用switch语句的时候需要注意什么事项?1)在switch(exp)语句中,exp表达式的类型必须是与int类型兼容的基本类型,即能自动转换为int的类型。
包括byte、short、char和int类型。
其他类型不能作为exp表达式的类型。
2)在case value字句中,value表达式必须满足以下条件:1.value类型必须是与int类型兼容的基本类型,包括byte、short、char和int类型。
2.value必须是常量。
3.每个case子句的value表达式的值必须不同。
3)在switch语句中最多只能有一个default子句。
default子句是可选的,并且可以位于switch语句中的任何位置。
4)如果switch表达式与某个case表达式匹配,或者与default情况匹配,就从case子句或default子句开始执行。
假如遇到了break语句,就退出整个switch语句,否则依次执行switch语句中后续的case子句,不再检查case表达式的值。
10.方法重载和覆盖重载方法必须满足以下条件:1)方法名相同2)方法的参数的数据类型、个数、顺序至少有一项不同3)方法的返回类型可以不相同4)方法的修饰符可以不相同覆盖方法必须满足以下条件:1)子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致;2)子类方法不能缩小父类方法的访问权限;3)子类方法不能抛出比父类方法更多的异常;4)方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。
在同一个类中方法只能被重载,不能被覆盖;5)父类的静态方法不能被子类覆盖为非静态的方法;6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法;7)父类的非静态方法不能被子类覆盖为静态方法;8)父类的私有方法不能被子类覆盖;9)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法;10)父类的非抽象方法可以被覆盖为抽象方法。
方法重载和方法覆盖具有以下相同点:1)都要求方法名相同;2)都可以用于抽象方法和非抽象方法之间。
方法重载和方法覆盖具有以下不同点:1)方法覆盖要求参数签名必须一致,而方法重载要求参数签名必须不一致;2)方法覆盖要求返回类型必须一致,而方法重载对返回类型不做限制;3)方法覆盖只能用于子类覆盖父类的方法,而方法重载用于同一类的所有方法;4)方法的覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制;5)父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次。
11.多态有什么样的特征?多态的特征如下:1)对于一个引用类型的变量,编译器按照它声明的类型处理。
2)对于一个引用类型的变量,运行时java虚拟机按照它实际引用的对象处理。
3)在运行时环境中,通过引用类型变量来访问所引用对象的方法和属性时,java虚拟机采用以下的绑定规则:1 实例方法与引用变量实际引用的对象的方法绑定,这种绑定属于动态绑定,因为是在运行时由java虚拟机动态决定的。
2 静态方法与引用变量所声明的类型的方法绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经做了绑定。
3 成员变量(包括静态变量和实例变量)与引用类型所声明的类型的成员变量绑定,这种绑定属于静态绑定,因为实际上是在编译阶段就已经做了绑定。
12.什么是多态?面向对象程序设计为什么要引入多态的特殊性?使用多态有什么优点?多态性是对象根据实际情况自动调用不同类层上适当的同名方法的一种现象。
无论什么时候,创建有层次关系的一些类时,如果这些类有可能共享一个方法声明,就应当考虑分别在每个类中实现不同的方法。
在超类中使用抽象(或普通)的方法,然后在子类中实现(或覆盖)该方法,这样就能产生多态性。
多态性能使我们很容易在从超类继承来的新类上添加新的功能。
13.继承的使用原则。
1)继承树的层次不可太多,应该尽量保持在两到三层。
如果继承树的层次过多会导致以下弊端:1.对象模型的结构太复杂,难以理解,增加了设计和开发的难度。
2.影响了系统的可扩展性。
2)继承层的上层为抽象层,继承树上层的类具有以下的作用:1.定义了下层子类都拥有的相同属性和方法,并且尽可能地为多数方法提供默认的实现,从而提高代码的可重用性。
2.代表系统的接口,描述系统所能提供的服务。
3)继承关系最大的弱点是打破了封装,对于专门用于被继承的类必须精心设计,应该遵循以下原则:1.对这些类必须提供良好的文档说明,使得创建该类的子类的开发人员知道如何安全的扩展它。
2.尽可能的封装父类的实现细节,也就是把代表实现细节的属性和方法定义为private类型。
3.把不允许被子类覆盖的方法定义为final类型。
4.父类的构造方法不允许调用可被子类覆盖的方法。
5.如果某些类不是专门为了继承而设计,那么随意继承它是不安全的,因此可以采用以下两种措施来禁止继承:(1) 把类声明为final类型。
(2) 把这个类的所有构造方法声明为private类型,然后通过一些静态方法来负责构造自身的实例。
14.Abstract修饰符的用法1)用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不允许创建抽象类本身的实例。
2)用abstract修饰的方法表示抽象方法,抽象方法没有方法体,不提供具体的实现。
3)抽象类可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
4)如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类,否则编译出错。
5)没有抽象构造方法,也没有抽象静态方法。
6)抽象类中可以有非抽象的构造方法,创建子类的实例时可能会调用这些构造方法。
7)抽象类及抽象方法不能被final修饰符修饰。
15.Final修饰符的用法。
1)用final修饰的类不能被继承,即没有子类。
2)用final修饰的方法不能被子类的方法覆盖。
3)用final修饰的变量表示常量。
4)final不能用来修饰构造方法。
5)用final修饰的变量表示常量,只能被赋一次值。
16.Static修饰符的用法。