zoukankan      html  css  js  c++  java
  • Java基础面试

    1.该类的静态代码块和父类的静态代码块都会在main方法之前执行。

    2.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次;父类优先于子类;按照成员定义顺序初始化。
    实例化顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,      父类非静态变量,父类非静态代码块,父类构造函数,     子类非静态变量,子类非静态代码块,子类构造函数。

    3.java中的接口不能有变量,仅有的常量默认public static final修饰。

    4.java在处理基本数据类型时,都是按照值传递,处理其他的都是按照引用传递。

    5.clone方法,深复制和浅复制的区别:深复制把复制的对象所引用的对象都复制了一遍;浅赋值仅仅赋值所考虑的对象,不复制他所引用的对象。

    6.三种获取类的方法:1)class.forName(); 2)类名.class; 3)实例.getClass()。

    7.四种创建对象的方法:1)通过new实例化;2)通过反射中类.newInstance();3)通过clone()创建;4)通过反序列化的方式创建对象。

    8.当子类中定义的成员变量和父类中定义的成员变量相同时,子类成员变量会覆盖父类的成员变量,不会继承.,   但是通过子类对象获取父类成员变量时值还是父类未覆盖的值。

    9.java提供两种用于多态的机制,编译时多态和运行时多态。编译时多态是通过方法重载实现的,运行时多态是通过方法覆盖实现的。

    10.方法重载和方法覆盖:覆盖是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。覆盖要求参数列表相同,重载要求参数列表不同。

    11.抽象类和接口的异同:
    相同点:1)接口和抽象类都不能被实例化 2)接口的实现类或者抽象类的子类只有实现了他们之中的抽象方法后才能被实例化。

    不同点:1)接口只有定义,其方法不能再接口中实现,只有实现接口的类才能实现接口中定义的方法,而抽象类可以有定义与实现,即方法可以在抽象类中被实现
    2)接口需要实现implements 但抽象类需要被继承extends,一个类可以实现多个接口,但是一个类智能继承一个抽象类。
    3)接口中定义的成员变量默认为public static final,且必须是public static final,只能够有静态的不能被修改的数据成员,而且必须为其赋初值,所有成员方法必须是public和abstract的。
    抽象类可以有自己的数据成员,也可以有非抽象的方法,成员默认为default的,也可以被定义为private,protected和public的。
    4)接口被用于实现比较常用的功能,便于日后的维护或者添加删除方法,抽象类更倾向于充当公共类的角色。
    接口可以继承接口,抽象类可以实现抽象类,抽象类也可以继承具体类,抽象类也可以有静态类的main方法。

    12.内部类:主要分为四种 静态内部类 ;成员内部类 ;局部内部类 ;匿名内部类
    1)静态内部类不能与外部类有相同的名字,不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法;非静态内部类不能有静态成员。
    2)局部内部类像局部变量一样,不能被public protect private以及static修饰
    3)匿名内部类是一种没有类名的内部类,不能使用关键字class extends implements 没有构造函数,他必须继承其他类或者实现其他接口。


    13.当子类的构造函数需要调用父类的构造函数时super()必须为构造函数中的第一条语句。

    14.final,finally,finalize区别:
    final:1)final用于声明属性,方法,类,表示不可变属性,方法不可覆盖,类不可被继承。(不可变有两层含义:引用不可变;对象不可变。final指的是引用的不可变)
    2)final类,该类不能被继承,所有的方法不能被重写,但是属性可变。一个类不能既被声明为abstract又被声明为final。
    finally:作为异常处理的一部分,跟在try/catch后并且附带一个语句块,表示这段语句最终一定会被执行。
    finalize:是object类的一个方法,在垃圾回收器执行时会调用被用于回收对象的finalize方法。

    15.static关键字:主要作用:实现某个方法或属性与类而不是与对象关联在一起。
    1)静态成员变量:静态成员变量属于类不属于某个对象,在内存中指有一个复制,另外,java中不能在成员函数内部定义静态变量。
    2)静态成员方法:静态方法属于类不属于某个对象,静态方法中不能使用this和super关键字。static关键字一个很重要的用途就是用来实现单例模式。(单例模式:隐藏构造函数,提供一个静态创建对象的方法)
    3)静态代码块:不在任何一个方法体内且只执行一次。

    16.switch语句:支持int 或者int的包装类Integer ,一些能隐式转化成int类型的例如short byte 和 char 还有他们的包装类也支持。另外Java7中开始支持String类型。

    17.volatile:是一个类型修饰符,他是被设计用来修饰不同线程访问和修改的变量。系统每次用到它的时候会从对应的内存当中提取。

    18.不可变类:所有基本类型的包装类都是不可变类(引用不可变)。
    创建一个不可变类五个原则:
    1)类中所有成员变量被private所修饰。
    2)类中没有写或者修改成员变量的方法,只提供构造函数一次生成。
    3)确保类中的所有方法不会被子类覆盖(利用final达到目的)。
    4)如果一个类成员不是不可变类,那么在成员初始化或者使用get方法获取该成员变量时,需要通过clone方法来确保类的不可变性。
    5)如果有必要覆盖Object的equals和hashCode方法。

    19.java中存在八种基本数据类型:byte short int long float double char boolean(需要注意java中默认声明的小数是double类型的,所以float a=1.1是不合法的)

    20.不同数据类型的转换:
    自动转化。
    1)byte char short类型参与运算时会自动转换为int类型。但当使用+=时就不会产生类型转换。
    2)基本数据类型和boolean类型时不能相互转化的。
    当需要高级数据类型转化为低级数据类型时就需要进行强制类型转换。

    21.round ceil floor方法:round方法表示四舍五入,ceil方法表示向上取整,floor方法表示向下取整。

  • 相关阅读:
    禅道导出的CSV文件打开为乱码的解决方法
    谈谈微信支付曝出的漏洞
    阿里云ACE深圳同城会 开始报名
    CSS 埋点统计
    How to use “svn add” recursively in Linux shell?
    Java反序列化漏洞执行命令回显实现及Exploit下载
    在线测试 ssl 安全性
    检测一下你的专业指数:2015年十大测试工具你认识几个?
    nginx用户认证配置( Basic HTTP authentication)
    FTP基础知识 FTP port(主动模式) pasv(被动模式) 及如何映射FTP
  • 原文地址:https://www.cnblogs.com/shz365/p/4915122.html
Copyright © 2011-2022 走看看