Java核心基础(2) 面向对象

Java面向对象基础

面试题总结(2)

1、Overload和Override(OverWrite)有什么区别?Overload 的方法是否可以改变返回值的类型?

??1)重载Overload是方法的重载,表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同,这些不同包括位置不同,个数不同,类型不同。

??2)重写 Override 是方法的重写,表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

??3)Override子类覆盖父类的方法时,只能比父类抛出更少的异常和更小的异常,或者抛出父类抛出的异常的子异常。子类方法的访问权限只能和父类相同或者比父类的更大,不能更小。如果父类的方法是 private 类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。 覆盖的方法的返回值必须和被覆盖的方法的返回一致;

??4)Overload 与返回值类型和修饰符以及异常无关只要方法名相同形式参数不同即为重载。

2、成员变量(全局变量)和局部变量的区别?

??1)定义的位置

????局部变量定义在函数中,语句内。

????成员变量定义在类中。

??2)内存中的位置。

????局部变量存储在栈内存中。

????成员变量存储在堆内存中。

??3)初始化值

????局部变量没有默认初始化值,必须赋值才可以使用。

????成员变量有默认初始化值。

??4)生命周期

????局部变量一旦作用区域结束,就立刻释放。

????成员变量也称为实例(对象)变量,随着对象的出现而出现。随着对象的被回收而释放。

3、静态变量 和实例变量的区别?

??在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。

??在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

??1)生命周期

????成员变量又叫实例变量,是随着对象的出现而出现,随着对象的消失而消失。

????静态变量又叫类变量,是随着类的加载而出现,随着类的消失而消失。

?? 2)内存中的存储位置

????成员变量存在在堆内存的对象中。

????静态变量存储在方法区的静态区中。

?? 3)存储的数据特点

????成员变量存储的数据是对象的特有数据。

????静态变量存储的数据是对象的共享数据。

?? 4)调用方式

???? 成员变量,只能被对象所调用。

????静态变量,能被对象调用,也可以被类名调用

4、请说出作用域 public, private, protected,以及不写时的区别

说明:如果在修饰的元素上面没有写任何访问修饰符,则表示 friendly。

5、构造器 Constructor 能否被继承?是否可被 override?能否被overload?

构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。

6、final, finally, finalize的区别

??final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型。

??finally是异常处理语句结构的一部分,表示总是执行。

??finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。(垃圾回收之前,用来激活对象,如果不能被激活,则被回收)JVM不保证此方法总被调用。

7、”==”和equals方法究竟有什么区别?

??==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用==操作符进行比较。

??equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。

8、是否可以从一个static方法内部发出对非static方法的调用?

??不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能对非static方法的调用。

9、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?抽象类中是否可以有静态的 main 方法?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。

10、abstract class(抽象类)和interface(接口)有什么区别?

抽象类:

??(1)含有abstract修饰符的类即为抽象类,abstract类不能创建的实例对象换句话说就是不能被new。

??(2)包含有abstract方法的类必须定义为抽象类,抽象类中的可以有普通方法。

??(3)抽象类的子类必须全部覆盖该抽象类的所有的抽象方法,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

??(4)Abstract能修饰类,修饰方法,不能修饰属性

接口:

??(1)接口(interface)可以说成是抽象类的一种特例,接口为更为纯粹的抽象类,不能有任何方法的实现,只能有方法的声明。

??(2)接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。

??(3)实现类必须实现所有接口中的全部方法声明;

??(4)接口中没有构造函数,即接口没有对象;

??(5)接口是多实现,即一个类可以实现多个接口,中间用逗号隔开;

两者比较语法区别:

??1.抽象类可以有构造方法,接口中不能有构造方法。

??2.抽象类中可以有普通成员变量,接口中没有普通成员变量

??3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

??4. 抽象类中可以包含静态方法,接口中不能包含静态方法

??5. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

??6. 一个类可以实现多个接口,但只能继承一个抽象类。

两者在应用上的区别:

??接口更多的是在系统架构设计方法发挥作用,接口是用来定义规范的。主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,实现了一种价值叫模版策略。

11、java中实现多态的机制是什么?

多态可分为:

??1.编译多态:主要是体现在重载,系统在编译时就能确定调用重载函数的哪个版本。

??2.运行多态:主要体现在OO设计的继承性上,子类的对象也是父类的对象,即上溯造型,所以子类对象可以作为父类对象使用,父类的对象变量可以指向子类对象。因此通过一个父类发出的方法调用可能执行的是方法在父类中的实现,也可能是某个子类中的实现,它是由运行时刻具体的对象类型决定的。靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

12、什么是内部类?Static Nested Class和Inner Class的不同是什么?

??(1)内部类就是在一个类的内部定义的类,内部类分为静态内部类,非静态内部类,局部内部类和匿名内部类。

??(2)非静态内部类可以无条件访问外部类的成员,不可以和自己的外部类重名但是可以与外部类平级同包的类重名,非静态内部类不能有static修饰的变量,

??(3)静态内部类不能访问外部类的非静态属性,外部类也不能访问静态内部类的成员,但是可以使用静态内部类的类名作为调用者使用。

??(4)内部类可以通过new外部类().new 内部类()进行实例化 Inner in=new Outer().new Inner();

内部类可以被其他类继承继续它的类需要写一个构造方法并且手工调用 外部类.super();

public class SubClass extends Out.In{
            public SubClass(Out out){
                out.super();
            }
        }

13、 Integer 与 int 的区别

??(1)int 是 java 提供的8种原始数据类型之一。Java 为每个原始类型提供了封装类,Integer 是 java为 int 提供的封装类。 int 的默认值为0,而 Integer 的默认值为 null,即 Integer 可以区分出未赋值和值为0的区别, int 则无法表达出未赋值的情况。

??(2)在 JSP 开发中, Integer 的默认为 null,所以用el 表达式在文本框中显示时,值为空白字符串,而 int 默认的默认值为0,所以用 el 表达式在文本框中显示时,结果为0,所以, int 不适合作为 web 层的表单数据的类型。

??(3)在 Hibernate 中,如果将 OID 定义为 Integer 类型,那么 Hibernate 就可以根据其值是否为null 而判断一个对象是否是临时的,如果将 OID 定义为了 int 类型,还需要在 hbm 映射文件中设置其 unsaved-value 属性为0。

??(4)另外,Integer 提供了多个与整数相关的操作方法,例如,将一个字符串转换成整数, Integer中还定义了表示整数的最大值和最小值的常量。

14、写clone()方法时,通常都有一行代码,是什么?

必须实现Cloneable接口 重写clone方法

protected Object clone() throws CloneNotSupportedException {
        returnsuper.clone();
    }

15、是否可以继承String类?

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

16、String s = new String(“xyz”);创建了几个String Object?二者之间有什么区别?

??两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它依据那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

时间: 2024-10-01 20:50:03

Java核心基础(2) 面向对象的相关文章

Java核心基础(1) 基本语法

Java基本语法 面试题总结(1) 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制 ??可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一 致. 2.Java 中有没有 goto? ??有,但是是作为保留字使用,现在没有在Java中使用. 3.八种基本数据类型和包装类以及大小. 八种基本数据类型 包装类 大小 byte Byte 8位 -2^7 ~ 2^7-1 short Short 16位 -2^15 ~ 2^15-

java语言基础之面向对象之变量

---恢复内容开始--- 定义变量的语法: 数据类型 变量名=值 ----------------------------------------------------------- 变量根据在类中定义位置的不同,分成两大类: 成员变量:全局变量/字段(Field),不要称之为属性(错误).直接定义在类中,方法外面. 1):类成员变量 使用static修饰的字段. 2):实例成员变量 没有使用static修饰的字段. 局部变量:变量除了成员变量,其他都是局部变量. 1):方法内部的变量. 2)

java核心基础

一.Collection集合类1.集合是存储对象数据的集合容器.2.集合比对象的优势:1.集合可以存储任意类型的对象数据,数组只能存储同一种数据类型的数据.2.集合的长度是会发生变化的,数组的长度是固定的.3.Collection单例集合的根接口List如果是实现了List接口的集合类,具备的特点:有序.可重复Set如果是实现了Set接口的集合类,具备特点:无序,不可重复4.Collection接口中的方法: 增加add(E e) 添加一个元素.添加成功返回true,添加 失败返回false.a

2018.6.13 Java语言基础复习总结

Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计算机执行. 1.2汇编语言 负责把汇编语言翻译成二进制的机器语言,这种翻译程序就是汇编程序. 1.3高级语言 1954年第一个完全脱离机器硬件的高级语言FORTRAN诞生 1.3.1C语言 是一种计算机程序设计语言,它既有高级语言的特点,又具有汇编语言的特点. 1.3.2 C++语言 是具有面向对象

面向对象的核心基础

================ 面向对象的核心基础 ====================注意: 标识符    1.定义必须有意义    2.以字母,下划线,$符号开头,其他内容不能包含特征符号    3.类名首字母必须大写,方法名和属性名首字母必须小写,使用驼峰命名方式    4.常量所有字符都必须大写,如果多个单词之间使用下划线分割 一.什么是对象       现实:具有明确定义的行为和特征的一类事物       程序: 堆内存中分配内容空间       具体类的实例.二.什么类 类:

Java基础和面向对象

Java基础和面向对象 一.数据类型和运算符 标识符 组成:字母.数字.下划线.$ 首字母:不能是数字 见名知义 不能是关键字(48个) 正确的:name.name123.age._name.$name 错误的:1name.public.123.na%me 标识符主要给一个元素起名字,需要符合起名字的以上4种规则.比如说,类的名字:首字母大写:变量名称:小写:方法名称:驼峰命名:数组名称.接口名称.集合名称. //你定义为汉字也可以,不过不推荐,因为国际语言以English为主.为了面向世界,使

Java编程基础-面向对象(中)

本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一些特性. 1.static关键字的特点: a)随着类的加载而加载,也就是说,静态会随着类的消失而消失,说明它的生命周期最长. b)优先于对象存在,明确一点,静态是先存在的,对象是后存在的. c)被类的所有对象共享. d)可以通过类名调用. 2.静态变量 在一个java类中,可以使用static关键字

Java 入门基础——面向对象的特征

计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程.面向对象编程就是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解用对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中. 面向对象的编程语言有封装.继承 .抽象.多态等4个主要的特征. 封装: 封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的"高内聚.低耦合",防止程序相互依赖性而带来的变动影响.在面向

Java基础总结--面向对象1

---面向对象的概念---1.面向过程与面向对象的区别面向过程:是一种思维习惯,解决一个问题的时候靠的是一个个方法调用--核心是动作面向对象:是一种更接近生活中解决问题的思维习惯,解决特定的问题靠对象完成--核心是对象eg:对于把大象装进冰箱分析面向过程思维习惯打开冰箱--装入冰箱--关闭冰箱(由3个动作实现)面向对象的思维习惯分析问题涉及的对象:大象 冰箱(打开 存储 关闭)冰箱打开--冰箱存储大象--冰箱关闭2.面向对象的特点封装数据和方法在对象中使得复杂问题简单化(面向多个函数--面向一个