刷几道Java面试题

来源:互联网 发布:云盘软件推荐 编辑:程序博客网 时间:2024/05/14 13:11

1.super与this的区别?

this当前类的对象,super父类对象。
在子类访问父类的成员和行为,必须受类继承规则的约束。
而this代表当前对象,所有资源的可以访问。
在构造函数中,如果第一行没有写super(),编译器会自动插入,但是如果父类没有不带参数的构造函数,或者这个参数被私有化了(用private修饰),此时你必须加入对父类的实例化构造。而this就没有这个要求,因为它本身就进行实例化的构造。
而在方法中super和this使用的方法就差不多了,只不过super要考虑是否能访问父类的资源。
这里写图片描述
这里写图片描述

2.作用域public, protected,private,以及不写时的区别?

public:不同包,同一包,类内都可用
private:类内可用
protected:不同包的子类,同一包,类内都可用
不写时:同一包,类内都可用

3.用代码输出如下图形

***************

解答如下,用C写的

#include<stdio.h>int main(){        for(int i = 0; i < 5; i++){                for(int j = 5; j > i ; j--){                        printf("*");                }                printf("\n");        }}

这里写图片描述

4.Java的事件委托机制和垃圾回收机制

java事件委托机制:一个源产生一个事件并将它送到一个或多个监听器那里。在这种方案中,监听器简单的等待,直到它收到一个事件。一旦事件被接受,监听器将处理这个事件,然后返回。
垃圾回收机制:垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,则此对象适合进行垃圾回收。

5.在java中,如何跳出当前的多重嵌套循环?

用break; return跳出

6.什么是java序列化,如何实现java序列化?(写一个实例)

序列化就是一种处理对象流的机制,所谓对象流也就是将对象的内容流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

import java.io.*;import java.util.Date;public class SerializableTest{        public static void main(String[] args) throws Exception{                ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("/Users/apple/Documents/JavaC/Demo.obj"));                Demo demo = new Demo("序列化例子","2017年9月27日","wtz");                out.writeObject(demo);                out.close();                ObjectInputStream in = new ObjectInputStream(new FileInputStream("/Users/apple/Documents/JavaC/Demo.obj"));                Demo inDemo = (Demo)in.readObject();                System.out.println("demo = " + "(" + inDemo + ")");                in.close();        }}class Demo implements Serializable {        private String name;        private String time;        private String author;        public Demo(String name,String time,String author){                this.name = name;                this.time = time;                this.author = author;        }        public String toString(){                return "name=" + name + ",time=" + time + ",author=" + author;        }}

这里写图片描述
这里写图片描述

7.一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

可以。如果这个类的修饰符是public,其类名与文件名必须相同。

8.Overload和Override的区别

Override(重写,覆盖)
1.方法名,参数,返回值相同
2.子类方法不能缩小父类方法的访问权限
3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)
4.存在于父类和子类之间
5.方法被定义为final不能被重写

Overload(重载,过载)
1.参数类型,个数,顺序至少有一个不相同
2.不能重载只有返回值不同的方法名,如图
这里写图片描述
这里写图片描述
3.存在于父类和子类,同类中

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现。

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

如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限,返回类型,抛出的异常进行重载。

1.Override的特点
1.覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果
2.覆盖的方法返回值必须和被覆盖的方法的返回值一致
3.覆盖的方法所抛出的异常必须和被覆盖的方法所抛出的异常一致,或者是其子类
4.被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖

2.Overload的特定
1.在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,统一方法内的及格参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int))
2.不能通过访问权限,返回类型,抛出的异常进行重载
3.方法的异常类型和数目不会对重载造成影响
4.对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类中对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果

重载可以改变返回值类型,但是如果只是返回值类型不一样是算不上重载的。重载的判断条件还是根据参数来,只不过是说重载的函数可以返回值不一样,就是说重载可以决定返回值类型,但是返回值类型不能决定重载。