常见问题总结

来源:互联网 发布:阿里云金牌 编辑:程序博客网 时间:2024/05/01 12:42


常见的异常:

       NullPointerException:空指针异常

       ClassCastException:类型转化异常

       ArrayIndexOutOfBoundsException:数组下表越界异常

       ClassNotFoundException:类找不到异常

       DateFormatException:数据转换异常

       IndexOutOfBoundsException:索引越界

       ConcurrentModificationException:并发修改异常

       ArithmeticException:算术异常

       NoSuchElementException:没有元素异常

       IllegalArgumentException:无效参数异常

       FileNotFoundException:文件拒绝访问

       IOException:IO异常

几个比较难记忆的方法和词:

       Synchronized:同步、                            pervious:ListIterator迭代器的倒序迭代方法

       equalsIgnoreCase:比较不区分大小       contains:包含

       binarySearch:二分查找                 currentTimeMillion:获取当前系统时间的毫秒值

       reverse:反转                                  getInstance:获得一个日历

       retainAll:集合取交集                           shuffle:将集合中的元素顺序随机打乱

       sort:排序(数组和集合)                    Character:字符型引用修饰符

      

 

1、 基本数据类型和引用数据类型的区别?

引用数据类型:

它是基本数据类型的包装类,它包含了一些对基本数据类型操作的属性和方法

       基本数据类型:

              它是引用数据类型的子类对象

2、 Integer和int的区别?

Integer是引用数据类型

1、它是Object的子类,

2、Integer是int的包装类

3、内部封装了一些对整数操作的属性和方法

4、Integer的默认值为null,它可以表达null和0的情况

       如:想表达没有参加考试和考试成绩为0的情况

int是基本数据类型

它是8中基本数据类型之一,int的默认值为0,无法表达未赋值的情况

3、 位运算符有哪些?

&:与、|:或^:异或、~:取反、<<:左移、>>:右移、>>>:无符号右移

4、 &和&&的区别?

       相同点:

&和&&都可以用于逻辑运算,表示逻辑与,当两边的结果都为true时,运行结果为true;只要有一边为false,结果就为false

       不同点:

1、&可以用位运算符,当两边结果不为boolean型时,&表示位运算,0表示假,1表示真

2、&&有短路功能,当逻辑运算的第一个表达式为false时,第二个表达式不运算

如:if(x==33 && ++y),如果x不等于33,那么y不会增长

5、 在Java中,如何跳出多重循环?

1、 可以通过标号的方式,利用break跳出

在要跳出的循环语句出加上标号,利用break 标号;方式退出

       2、利用标记方式退出

              在要退出的循环语句表达是中,加入判断标记,在内层循环更改标记,进行退出

6、 Switch语句上能否使用byte类型?long类型?String类型?

Switch语句只能是一个整数表达式或枚举常量;整数表达式可以是int类型或Integer的包装类;因为byte、short、char都会隐士转换为int类型,所以可以使用。JDK1.7以后,String类型也可以使用

7、 short s=1;s=s+1这句话会报错吗?short s1=1;s1+=1会报错吗?

short s=1,s=s+1,会报错,因为s+1在运算时,会自动进行类型提升,隐士转换int类型,那么在赋值给shor类型的s时,会出现有损精度异常

short s1=1;s1+=1,不会报错,因为+=是Java中规定的运算符,Java编译器会对其进行特殊处理,不会进行类型的隐士转换,得到的结果依然是short类型,不会报错

8、 char类型变量能否存入一个汉字?

可以,因为char类型存储的就是unicode编码的字符,unicode包含汉字;但是,如果存储的是unicode中不包含的汉字,那么就不能存储了

Unicode编码占两个字符,char类型的也占两个字符,所以能存储

9、 用final修饰变量时,是引用不能变,还是引用的对象不能变?

Final修饰变量时是指,引用变量不能变,引用变量所指向的对象的内可以该变

10、反射?

      反射获取字节码文件的三种方式:

1、Class类的静态forName方法

2、通过对象的class属性

3、通过每个对象都具备的getClass方法

反射获取成员方法:

反射获取公有的成员方法:getMethod([ 参数类型 ])

反射获取所有的公有成员方法:getMethods()返回值为一个数组

反射获取私有的成员方法:getDeclaredMethod()

反射获取字段:

反射获取一个字段:getFiled(变量名)

反射获取一个私有字段:getDeclaredField(变量名)

反射获取所有字段(包括私有):getDeclaredFields()返回值为一个数组

反射获取构造函数:

反射获取一个空参构造函数:getConstructor()

反射获取一个带参的构造函数:getConstructor(参数类型)

反射获取所有构造函数包括私有:getDeclaredConstructor()返回值为一个数组

反射获取到的私有的,无法直接使用或赋值,需要使用setAccessible(true)方法进行设置,简称:暴力反射

11、“= =”和equals方法的区别:

       “= =”:

                     应用于基本数据类型,比较的是“值”

                     应用于引用数据类型,比较的是“地址值”

       equals:

                     应用于引用数据类型,在Object类中比较的是“地址值”

              一般其他类中,都复写了Object类中的equals方法,建立了自己的比较方式

 

12、静态变量(类变量)和实例变量(成员变量)的区别?

              静态变量:

被static所修饰,它不属于某个对象,它随着类的加载而加载,存在于方法区中,又称为“类变量”。

              实例变量:又称“成员变量”,随着对象的加载而加载,存在于堆内存中

 

13、被final修饰的成员变量,如果没有赋初值之会怎样?被static修饰的呢?

1、被final修饰的成员变量,如果没有赋初值,那么要在构造函数中为变量赋值

                     因为final修饰的变量是一个常量 ,在创建对象的时候,就要有初值

2、 被static是修饰的成员变量,在定义时就要为其赋初值,因为静态随着类的加载而加载,可以被类名调用;如果没有初值,报错!

 

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

       1、抽象类:

              1、被abstract修饰的类;

              2、抽象类不能创建对象;

              3、类中含有abstract修饰的方法,此类必须被abstract所修饰(抽象类);

              4、抽象中可以定义非抽象方法,子类可以直接继承使用;

              5、抽象类中的抽象方法,子类需要重写;

              6、抽象类中,可以有构造函数(子类访问父类使用)

              7、抽象类中,不可以有抽象的构造函数和静态的抽象方法

       2、接口:

              1、接口是抽象类中的一个特例,接口中的方法都必须是抽象的

              2、接口中的方法修饰符是固定的:public abstract

              3、接口中的成员变量是常量,修饰符为:public staticfinal

       两者比较:

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

              2、抽象类中可以有普通成员变量,接口中没有普通成员变量(变量为常量)

              3、抽象类中可以定义非抽象方法,接口中的所有方法都是抽象方法

              4、抽象类中的成员修饰符可以自定义,接口中的成员修饰符是固定的:public

              5、抽象类中可以包含静态方法,接口中不能含有静态方法

              6、一个类可以实现多个接口,但只能继承一个类


15、continue和break两个关键字的区别?

       Continue:用在循环语句中,用于结束本次循环,继续下一次循环

       Break:用在循环和判断语句中,用于结束循环和结束判断

 

16、函数的重载和函数的重写?

       重载:在子父类中,函数名、参数列表和返回值都心相通

       重写:在同一个类中,函数名相同,参数列表不同,与返回值无关

 

17、面向对象思想?

       万物皆对象,面向对象是相对于面向过程而言的

              面向过程:强调的是动作和行为

              面向对象:强调的是具备某些功能的对象

       面向对象是基于面向过程的,它是复杂的问题简单化,使执行者变为指挥者

       面向对象有三大特征:封装、继承和多态

              封装是继承的前提

              继承是多态的前提

 

18、字符流和字节流的区别?

       1、字节流读取的时候,读到每一个字节就返回一个字节

          字符流使用了字节流读到一个或多个字节时,先去查指定的编码表,将查找到的字符返回

       2、字节流可以处理所有类型数据

          字符流只能处理字符数据

       结论:只要处理纯文本数据,就要优先考虑使用字符流,除此之外,都是用字节流

 

19、this关键字?

       this用于区分成员变量和局部变量

              this代表成员变量

       this代表本类对象、就是那个对象在调用this所在的方法,this就代表那个对象

       this语句,用在构造函数间的互相调用

 

20、static关键字?

       用于修饰内部类、成员方法和成员变量

       Static的特点:

1、 静态,随着类的加载而加载,随着类的消失而消失

2、 优先于对象存在,静态先存在,对象后存在

3、 被静态修饰后,就多了一种调用方式,类名 . 调用

4、 静态修饰,被所有对象所共享

5、 静态只能访问静态(非静态可以非静态,也可以访问静态)

6、 静态中不能存在this和super关键字

       因为静态优先于对象存在,this存在与对象中

21、抽象类和接口的区别?

1、抽象类只能被继承,而且是单继承

          接口需要被实现,可以是多实现

2、抽象类中的成员修饰符是自定义的

          接口中的成员修饰符是固定,public static

3、 抽象类中可以定义非抽象方法

    接口中的方法都是抽象的,需要子类全部实现

4、 抽象类是is a的关系

   接口是like a的关系

5、 抽象类中定义的是体系接口的共性内容

    接口中定义的是对象的扩展功能

22、接口中是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承类?抽象类中是否可以有静态的main方法?

       1、接口可以继承接口

       2、抽象类可以实现接口

       3、抽象类中可以有静态的main方法

23、wait和sleep的区别?

 wait:

1、 wait可以指定等待时间,也可以不指定时间

2、 不指定时间,只能由notify或notifyAll来唤醒

3、wait线程释放执行权,并且释放锁

sleep:

1、 必须指定时间,时间到,自动转为运行状态

2、 Sleep线程释放执行权,但不释放锁

 

24、字节流如何保证一开始就不会读到-1?

       字节流的read方法做了个类型提升,返回值提升为int,高位补0,就一定不会是负数

       在写的时候,又做了类型的强制转换,转换为字节


25、Collection和Collections的区别?

Collection是java.util下的接口,单例集合的顶层接口,继承与它的接口主要有:List和set,提供了关于集合的一些操作,如:添加、删除、遍历、判断一个元素是否是集合中的成员等
Collections是java.util下的一个更具类,它提供一系列的静态方法,实现了对集合的查找、排序sort、替换replaceAll等操作

26、throw和throws有什么区别?它们各自用在什么地方?

throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。 

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。

27、描述一下JVM加载class文件的原理机制?

       JVM中类的装载是由ClassLoader和它的子类来实现;Java ClassLoader是一个重要的Java运行时组件,它负责在运行时查找和装入“类文件”的类

28、可以直接对文件进行写入的类?

       printWriter、printStream、FileReader、FileWriter、FileInputStream、FileOutputStream


0 0
原创粉丝点击