您的位置:首页 > 其它

黑马成员——常见问题总结

2015-07-21 14:16 127 查看
常见的异常:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: