17、子类默认调用了父类无参构造函数.如果父类没有无参构造函数,必须手动重写子类的构造方法,并用super(参数)调用父类中有参构造的方法.
例:
class People{
private int age;
public People(int age){
this.age=age;
}
}
class Doctor extends People{
//不写以下构造方法则出错.
public Doctor(){
super(23);
}
//或者
public Doctor(int age){
super(age);
}
}
解决方法:在写类的有参构造方法时,最好定义个无参的构造方法.
18、构造方法调用父类的构造方法super()前不能有其他的语句.
19、final可以修饰形式参数,防止被改
例:
void walk(final int length){
}
20、import导入包的理解,重要的事情总要放到前面
21、private与abstract冲突,原因:子类实现(继承)不了接口(抽象类)中被private修饰的成员,但接口(抽象类)中的方法必须要重写,加private就没办法重写了
例:
interface InterfaceTest {
int f();
private abstract int ff();//此句错误,要去掉private
}
22、内部类可以被外部使用,可以访问外部类(宿主类)的privite成员;内部类成员加public也可以被外部访问,但也危险,定义成private外部不能访问此类了(常用).
public class OutClass {
private int i=2;
public class InnerClass{
public int j=i;
}
}
23、抽象类不用继承也能用
例:
abstract class Out2{
private int i=2;
public abstract int f();
public static Out2 getInstance(){
return new Inner2();
}
private static class Inner2 extends Out2{//static
public int f(){
return 2;
}
}
public static void main(String[] args) {
Out2 ou=Out2.getInstance();//抽象类不用继承也能用,获得此类的实例
int i=ou.f();
System.out.println(i);
}
}
24、接口里也可以定义类(内隐类)
例:
interface InterfaceTest {
int f();
class A{
int f(){
return 2;
}
}
}
25、内部类的使用.类NoNameInnerClass 不用implements实现接口,而用传递进来对象来用接口
interface Inter{
void paint();
}
public class NoNameInnerClass {
public void paint(Inter p){//传递进来对象来用接口
p.paint();
}
public void func(){
//为了获得对象,定义一个内部类,把此对象做参数
class Paint implements Inter{
public void paint(){
System.out.println("paint.");
}
}
Paint p=new Paint();
paint(p);
}
}
26、内部类的使用.不用类名,直接创建对象,无名内隐类,类名是他实现的接口名字
interface Inter{
void paint();
}
public class NoNameInnerClass {
public void paint(Inter p){//传递进来对象来用接口
p.paint();
}
public void func(){
//直接创建对象,无名内隐类,类名是他实现的接口名字,
paint(new Inter(){
public void paint(){
}
});
}
}
27、单态设计模式。能够创建类的唯一实例。把构造方法定义成private,再创建静态的成员方法getInstance()获得此类唯一实例.
例1.
public class ChineseTest{
public static void main(String[] args) {
Chinese Obj1 = Chinese.getInstance();
Chinese Obj2 = Chinese.getInstance();
System.out.println(Obj1 == Obj2);
}
}
class Chinese {
private static Chinese objRef = new Chinese();
private Chinese() {
}
public static Chinese getInstance(){
return objRef;
}
}
例2:
public class ChineseTest{
public static void main(String[] args) {
Chinese Obj1 = Chinese.getInstance();
Chinese Obj2 = Chinese.getInstance();
System.out.println(Obj1 == Obj2);
}
}
class Chinese {
private static Chinese objRef ;
private Chinese() {
}
}
34、运行提示ALERT: java/lang/ClassFormatError: Bad version information.原因
原因:当前编译器的版本过高。
解决方法: 编译器的版本不要过高否则有的手机不认,选择编译器方法:点项目右键属性->Java Compiler-> Enable project specific settings打勾,然后选择版本较低的编译器
38、添加资源文件夹名
在项目上右键->Properties->双击Java Build Path->点Add Foler->在下面的选项中选择update exclusion filters in other source folders to solve nesting,再添入资源文件夹名,如src、res等。