1.JAVA中四种修饰符的限制范围
private:修饰的成员只能在同类中别访问,而在同包、子类和其余包中都不能被访问
public:修饰的成员在同类、同包、子类(继承自本类)、其余包均可以访问
protected:修饰的成员在同类、同包、子类中能够访问,其余包中不能被访问
default:修饰的成员在同类、同包中能够访问,但其余包中不论是不是子类都不能被访问html
2.Java中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?
构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的建立就是经过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其余方法同样也能够重载。当新对象被建立的时候,构造方法会被调用。每个类都有构造方法。在程序员没有给类提供构造方法的状况下,Java编译器会为这个类建立一个默认的构造方法。Java中构造方法重载和方法重载很类似。能够为一个类建立多个构造方法。每个构造方法必须有它本身惟一的参数列表。但不能重写。Java不支持像C++中那样的复制构造方法,这个不一样点是由于若是你不本身写构造方法的状况下,Java不会建立默认的复制构造方法。构造方法不能显示调用。java
3.接口和抽象类的区别
从设计层面来讲,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。Java提供和支持建立抽象类和接口。它们的实现有共同点,不一样点在于:程序员
- 接口中全部的方法隐含的都是抽象的。而抽象类则能够同时包含抽象和非抽象的方法。
- 类能够实现不少个接口,可是只能继承一个抽象类类能够不实现抽象类和接口声明的全部方法,固然,在这种状况下,类也必须得声明成是抽象的。
- 抽象类能够在不提供接口方法实现的状况下实现接口。
- Java接口中声明的变量默认都是final的。抽象类能够包含非final的变量。
- Java接口中的成员函数默认是public的。抽象类的成员函数能够是private,protected或者是public。
- 接口是绝对抽象的,不能够被实例化。抽象类也不能够被实例化,可是,若是它包含main方法的话是能够被调用的。
- 抽象类有构造方法,接口没有构造方法 抽象类只能单继承,接口能够多继承
- 抽象类能够声明和使用字段,接口则不能,但能够建立静态的final常量;接口被声明为public,省略后,包外的类不能访问接口。
4.super和this的异同函数
- super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) this(参数):调用本类中另外一种造成的构造函数(应该为构造函数中的第一条语 句)
- super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员 函数据名(实参)
- this:它表明当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;若是函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
- 调用super()必须写在子类构造方法的第一行,不然编译不经过。每一个子类构造方法的第一条语句,都是隐含地调用super(),若是父类没有这种形式的构造函数,那么在 编译的时候就会报错。
- super()和this()相似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
- super()和this()均需放在构造方法内第一行。尽管能够用this调用一个构造器,但却不能调用两个。
- this和super不能同时出如今一个构造函数里面,由于this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,因此在同一个构造函数里面有相同的 语句,就失去了语句的意义,编译器也不会经过。
- this()和super()都指的是对象,因此,均不能够在static环境中使用。包括:static变量,static方法,static语句块。
- 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
5.什么是隐式转换和显式转换
显示转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据;隐式转换就是大范围的变量可以接受小范围的数据;
隐式转换和显式转换其实就是自动类型转换和强制类型转换。优化
6.char类型能不能转成int类型?能不能转化成string或double类型?
char在java中也是比较特殊的类型,它的int值从1开始,一共有2的16次方个数据;char<int<long<float<double;char类型能够隐式转成int,double类型,可是不能隐式转换成string;若是char类型转成byte,short类型的时候,须要强转。this
7.Java中各类数据默认值设计
- Byte,short,int,long默认是都是0
- Boolean默认值是false
- Char类型的默认值是" "
- Float与double类型的默认是0.0
- 对象类型的默认值是null
8.int和Integer的区别
原始类型-包装类:,boolean-Boolean,char-Character,byte-Byte,short-Short,int-Integer,long-Long,float-Float,double-Double
一、Integer是int的包装类,int则是java的一种基本数据类型
二、Integer变量必须实例化后才能使用,而int变量不须要
三、Integer实际是对象的引用,当new一个Integer时,其实是生成一个指针指向此对象;而int则是直接存储数据值
四、Integer的默认值是null,int的默认值是0
9.针对浮点型数据运算出现的偏差的问题,怎么解决
使用Bigdecimal类进行浮点型数据的加减乘除运算和比较大小(具体方法百度)
8.
一个java类中包含哪些内容?
JAVA类中主要包含属性、方法、构造方法、块以及内部类。
属性用来定义对象的数据;
方法用来定义对象的行为;
构造方法能够用来建立对象;
块可以用来在类加载时执行操做或者在每次实例化前执行通用操做;
内部类做为类的一个成员存在,可以访问外部类的属性和方法。指针
9.内部类与静态内部类的区别
静态内部类相对与外部类是独立存在的,在静态内部类中没法直接访问外部类中变量、方法。若是要访问的话,必需要new一个外部类的对象,使用new出来的对象来访问。可是能够直接访问静态的变量、调用静态的方法;
普通内部类做为外部类一个成员而存在,在普通内部类中能够直接访问外部类属性,调用外部类的方法;
若是外部类要访问内部类的属性或者调用内部类的方法,必需要建立一个内部类的对象,使用该对象访问属性或者调用方法;
若是其余的类要访问普通内部类的属性或者调用普通内部类的方法,必需要在外部类中建立一个普通内部类的对象做为一个属性,外同类能够经过该属性调用普通内部类的方法或者访问普通内部类的属性;
若是其余的类要访问静态内部类的属性或者调用静态内部类的方法,直接建立一个静态内部类对象便可。htm
11static关键字的做用
static关键字特色:
1.static是一个修饰符,用于修饰成员。(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量
2.static修饰的成员被全部的对象共享
3.static优先于对象存在,由于static的成员随着类的加载就已经存在
4.static修饰的成员多了一种调用方式,能够直接被类名所调用,(类名.静态成员)
5.static修饰的数据是共享数据,对象中的存储的是特有的数据对象
Static能够修饰内部类、方法、变量、代码块
Static修饰的类是静态内部类
Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,能够直接使用类名来调用。在static方法中不能使用this或者super关键字。
Static修饰变量是静态变量或者叫类变量,静态变量被全部实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。
Static修饰的代码块叫静态代码块,一般用来作程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块能够有多个,若是有多个,按照前后顺序依次执行。
参考:https://www.cnblogs.com/hcl22/p/6371939.html
https://baike.baidu.com/item/%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95/10455265?fr=aladdin
https://www.cnblogs.com/hasse/p/5023392.html