《SCJP试题1000例》学习笔记2
原创
©著作权归作者所有:来自51CTO博客作者power_harbour的原创作品,请联系作者获取转载授权,否则将追究法律责任
1. 程序控制
循环结构,条件分支结构,异常处理
2. 循环结构
While,do…while,for
While的条件必须是boolean值,注意,不能是boolean的封装类型
循环体只有一条语句时,可以不用花括号
do…while不管条件取何值,至少要执行一次
for的初始化语句也可以放在外面,也可以同时初始化多个变量,条件也必须是布尔值
for(;;)是死循环
用continue和break可以完成goto相应的功能
在Java中唯一用到标签的地方是在循环语句的之前,即紧靠循环语句的前一条语句,该语句以冒号(:)结尾,用来配合continue和break的使用
Continue语句,是退出当前循环,开始下次循环,用于循环时:根据其位置,会有不同执行效果:continue ,continue label,
Break语句也是这样:break是中断循环,而不是继续,是到循环机构的后面开始执行
3. 条件分支语句:if-else,switch
条件表达式也是boolean值,
Switch语句的条件或选中因子只能是字符型,字节型,短整型和整型
Case后的选择因子必须是常量,并且只能是一个数,case后的执行语句可以是单句,也可以是多句,也可以用{},或不用包含。
Default语句是可选的,在其他选择因子不匹配时,会获得执行,可以在swtich语句内的前后和后面,任何位置都可以
若break语句存在,则执行完case后语句,就跳出switch语句。
4. 异常处理
Java语言才有try…catch…finallyjie结构处理异常,只有try是必须的,但catch和finally必须有一个,不要求一定2个一起在。
Finally语句一定会执行,就算之前有return语句
只有执行System.exit()或发证Error时,注意不是exception,finally才不会执行直接退出
Catch不能被同级的catch捕获,只能被内层的try。。。catch块捕获。
Java.lang.Error和java.lang.RuntimeException是编译器和系统错误,程序员不要处理
Java.lang.Exception是可以从Java方法中抛出的基本类型异常,是程序员要处理的
如果在一个方法体中throw语句抛出一个异常,则必须在方法声明中采用throws语句抛出异常。
5. 面相对象
封装,继承和多态
6. 封装就是对属性和方法的载体类,只能通过提供的方法来访问,而把实现细节隐藏起来。一般方式是把属性定为private,把方法定为public
Java代码重用有2中方式:组合(has a)和继承(is a)
7. java中不允许多重继承,但允许实现多个接口,继承同时可以实现多个接口,implements
接口中的成员变量,默认是public,static,final的,接口中定义的方法都没有方法体,同抽象类一样
接口仅提供一种形式,并不提供实施细节,所以接口中的方法均视为抽象方法。
8. 多态只子类和父类具有同名方法,并允许父类引用指向子类的对象,即允许把子类对象赋予给一个父类的引用型变量。运行期间,由系统自动判断应该调用父类还是子类的方法。
9. this关键字代表当前对象,他引用的是当前创建的类实例的对象句柄。
10. Java不允许多重继承,但接口可以继承多个基础接口,接口可以多重继承
11. 构造器主要用来初始化,创建 类实例,必须同类名一样,无返回值,构造器前只能用public,private,protected修饰。
创建一个对象,并分配内寸,new XXX();
子类不能继承父类的构造方法。因为他是用来初始化类的,和每个类紧密相连,不能被继承。每个类必须定义自己的构造器。
默认无参构造器与所属类的访问修饰符一致,系统自动创建的构造器。
不能在构造器中同时调用this和super
Java构造器如同一般方法,可以抛出异常。如果父类默认构造器抛出一个异常,子类的默认构造器应该处理由父类抛出的异常。
12. 过载和重载
Java语言共有2中方式同用一个方法名:过载和重载
重载:方法名,参数列表(参数类型,参数个数和参数顺序)和返回值均不变,不同类中
过载:是有相同方法名,参数列表不同,返回值也可以不同,同一个类中,如果只是参数类型不同,且参数类型之间没有继承关系,则不能构成过载。
可以把继承来的方法声明为抽象方法,但需要注意:该方法将无方法体,并且子类也要被声明为抽象类。
重载方法声明异常的抛出:只能是被重载方法抛出异常的子类,或一样的异常,或不抛出任何异常。
父类 变量 = new 子类();变量调用子类的方法,调用父类的属性,因为属性是在编译期就决定了。变量是一个运行时子类对象。
13. 内部类,又称嵌套类,是定义在一个类内部的类
内部类分为定义在方法体内的内部类和定义在方法体外的内部类
定义在方法体内的内部类,又分为:有实例名称的内部类和无实例名称的内部类
定义在方法体外的内部类,如同类的成员一样,可以用外部类的实例来引用
定义在方法体内的内部类,因为如同其他方法成员一样,属于方法体,所以只能在方法体中创建实例,且只能在方法体中被访问。
内部类生成class文件规则:外部类名$内部类名,如果是匿名类,则会用数字代替。
对内部类的继承没有限制
对内部类层次,没有限制
内部类也可以实现接口,一个内部类实际上是外部类的子类
内部类如同类成员一样,对整个类有访问权,包括可以访问私有属性,即是是方法体中的内部类。
静态内部类如同一个静态方法,也只能访问静态属性。
成员内部类也可以被不同内部类访问。
一个定义在方法体中的内部类只能访问方法中被定义为final的局部变量。原因是:定义在方法体中的变量会随着方法的退出而销往,通过定义其为final变量,可以扩展其生命周期,可以与访问其类实例的生命周期想配合,因为类实例生命周期不同于方法和其所属变量,它是由系统控制回收时机的。
定义在方法体中的内部类,前面不能有任何访问修饰符,如果一个方法中的局部变量一样。完全属于方法,而且不能加static修饰符
匿名内部类定义形式为new XXX{}
匿名内部类可以实现接口或继承其他类,但不能同时既继承又实现接口。
匿名内部类不能有明确的构造器
匿名内部类不能被abstract和static修饰
匿名内部类默认是final类,不能被继承。
内部类的方法,也可以被外部类访问。通过内部类的实例。
14. Java线程
Java语言在其生命周期中有5中状态:
新建状态-就绪状态-运行状态-阻塞状态-死亡状态
Java中创建线程 2中方式:实现Runnable接口,继承Thread类
Start()方法可以启动线程,run()方法。启动线程并不是意味着可以立刻得到运行。
SetDaemon()可以将一个线程置为后台线程。
线程优先级。
Yeild()使线程从运行状态转换到就绪状态
Sleep()使线程暂停一段时间,当指定时间过后,线程并不能马上获得执行,而必须先进入就绪状态等待获得CPU使用权。
在多线程环境下Java使用同步机制防止资源冲突。
Wait和notify是定义在object类中的,用于实现同步机制,Thread类本身没有这两个方法的定义。Notify或notifyall用于唤醒等待的线程,wati,notify或notifyaal需要联合使用。
Synchronized关键字用于修饰同步代码块,在两个线程同时试图访问同一数据时避免数据毁损。每个对象都包含了一把锁,它自动称为对象的一部分,不必为此写任何代码。调用任何被声明为同步的方法时,对象就会被锁定,不可再调用该对象上的任何同步方法,除非第一个方法完成结束,并解除锁定。
15. IO
Fie类只是文件的代表,不是文件本身,如果File实例代表的文件在文件系统中不存在,则File类也不会在文件系统中自动创建该文件。
System.out是一个常量,不能给其赋值。
16. 基础包
Object类
hasCode()返回值类型是int
class类和classloader类可以用于装载其他类
Math类的所有常量和方法均是public和static的,是final类,构造器是private的,不能被实例化。
封装类中的数值可以用xxxValue()提取。
把字符串转换成基本类型,用其封装类型做,封装类型.parseXXX();获得其返回值
String.valueOf();把其他类型转换成String。
String类是final类,Java中存在字符串池,如果名字相同,它们指向的同一个字符串对象
String str1=”abc”,String str2=”abc”;,用new 语句创建的也是一样的。
调用字符串上定义的改变字符串内容的方法,返回值都是一个新字符串,而原有字符串不变。下一篇:Java常见面试题(基础) 1
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
大数据学习笔记1000条
大数据学习笔记1000条
数据 spark hadoop hive hdfs