Java学习常见的易错点、难点(一)(一)

2014-11-24 08:49:26 · 作者: · 浏览: 0
1、作用域public,private,protected, 以及不写时的区别
答:区别如下:
作用域 当前类 同一 package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
不写时默认为 friendly
2、Anonymous Inner Class ( 匿名内部类) 是否可以 extends继承 )其它类,是否可以 implements(实现)interface( 接口)
答:匿名的内部类是没有名字的内部类。不能 extends(继承 ) 其它类,但一个内部类可以作
为一个接口,由另一个内部类实现
3.Collection 和Collections 的区别
答:Collection是集合类的上级接口,继承与他的接口主要有 Set 和 List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作
4.String s=new String("jzy");创建了几个对象
5.抽象类不一定包含抽象方法,覆盖方法抛出的异常不能比原方法多,子类中访问权限不能比原方法更严格。
6.不能在静态方法中使用this。
7.编译MyClass.java之后,得到了三个字节码文件:MyClass.class , MyClasslittle$.class MyClass$1.class.这表明什么
答: MyClass类中有两个内部类:一个是命名的little,另一个是匿名的1
8.当方法遇到异常又不知如何处理时,应该怎么做抛出异常
9.类的加载和构造方法的调用顺序
类的加载的顺序:先递归地加载父类的静态成员/代码块(object的最先);再依次加载
到本类的静态成员。 调用构造方法:先递归地调用父类的构造方法;默认调用父类空参的同,也可在第一行写明调用用父类某个带参的。再依次到本类的构造方法; 先初始化父类的静态代码--->初始化子类的静态代码--> == ==(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码---> == ==初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数 ==
10.在异常处理中 若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将父类放在后面,子类放在前面。
11.while循环判断条件一般是程序结果,for循环的判断条件一般是非程序结果
12.一个接口实现多个接口用extends
如:
public interface 新接口 extends 交通工具, 金属制品 {
}
13.数组旋转90°坐标变换
假设该数组为 a[n][n],
其中的一个元素为 a[x][y],
顺时针旋转 90度后, 该元素的坐标为 a[y][n-x]
14.所有类的对象其实都是Class的实例
15.Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制
编程
实现对这些元数据的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现。
16.方法和属性的继承(方法属性子类和父类都声明了)
Parent a=new Child();
a.showData(); //调用的是子类的方法
System. out.println(a. i); //调用的是父类的属性
17.实例变量:定义在类中但在任何方法之外。(New出来的均有初值)
局部变量:定义在方法之中的变量。
局部变量要先赋值,再进行运算,而实例变量均已经赋初值。这是局部变量和实例变量的一大区别。
18.构造方法
注意:构造方法在生成对象的时候会被调用,但并不是构造方法生成了对象。
构造方法是在对象生成的过程中自动调用,不可能利用指令去调用。
在一个对象的生成周期中构造方法只用一次,一旦这个对象生成,那么这个构造方法失效。
可以构造多个构造方法,但多个构造方法的参数表一定不同,参数顺序不同即属于不同的构造方法:
public student(string name,int a){
}
public student(int a,string name){
}
为两个不同的构造方法。
在构造方法中, this表示本类的其他构造方法:
student(){};
student(string n){
this();// 表示调用student()
}
如果调用 student(int a)则为this(int a)。
特别注意 :用this调用其他构造方法时,this必须为第一条语句,然后才是其他语句。
19.this
This表示当前对象。
Public void printNum(){
Int number=40 ;
System.out.println(this.number);
}
此时打印的是实例变量,而非局部变量,即定义在类中而非方法中的变量。
This.number表示实例变量。
谁调用 this.number那么谁即为当前(this)对象的number 方法。
如果不指明谁调用方法,则默认为 this 。
区分实例变量和局部变量时一定要写 this 。
20.封装:使对象的属性尽可能私有,对象的方法尽可能的公开。用 private表示此成员属性为该类的私有属性。
Public表示该属性(方法)公开;
Private表示该属性(方法)为只有本类内部可以访问(类内部可见)。
(想用 private还要用set和get方法供其他方法调用,这样可以保证对属性的访问方式统一,并且便于维护访问权限以及属性数据合法性)
如果没有特殊情况,属性一定私有,方法该公开的公开。
21.继承
而如果父类中的私有方法被子类调用的话,则编译报错。
父类的构造方法子类不可以继承,更不存在覆盖的问题。(非构造方法可以)
如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法。
对于方法的修饰词,子类方法要比父类的方法范围更加的宽泛。
父类为 public,那么子类为private则出现错误。
之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。