您的位置:首页 > 编程语言 > Java开发

第一阶段:Java初级 ------- 面向对象基础

2011-05-09 15:16 441 查看
学面向对象用了些时间呢,难点不是很多,知识点的确蛮多的,知识点相互很灵活。算是对面向对象有了基本了解了吧。

面向对象 类 对象。

类就是模版,对象就是实例。

---------------------------------------------------------------------------------------

private 和 public

private : 将成员在类里私有化。

public : 将成员对外公有化。

2个关键词都不加,默认为public. main函数除外。

---------------------------------------------------------------------------------------

构造函数。

只能被编译器和同一类中的其他构造函数调用,一般用来初始化对象。

---------------------------------------------------------------------------------------

this

this是在每个对象的方法里都有的一个句柄。它指向调用该方法存的对象。this很像是一个
权限,用来表示一个作用域,一个范围。可以通过this来访问该this区域的成员。

例子:1 成员方法里的形参和方法所属的对象的成员变量同名。

2 一个类里要生成一个对象,而该对象又要访问该对象所在的类,就要this传递给该
对象。

3 构造函数除了被编译器调用,也可以被其他函数调用,但是只限该构造函数所在的
对象内的其他它构造函数。被调用的构造函数直接使用this(参数),编译器会根据
参数来选着调用相应的构造函数。

其实老师在讲部件和容器的时候,我不懂什么是部件,什么是容器。但是老师要讲的意思是明白了,所以我自己写了相应的程序。一个计算4次方的程序。

类1有一个计算2次方的方法,该方法通过访问引用它的对象来获取底数。

类2有一个计算4次方的方法,该方法使用类1的计算2次方的方法两次来计算4次方,类2让类1通过访问类2来获取底数。

MAIN生成类2对象,并且设置一个底数,然后使用该对象的计算4次方的方法。

class n4
{
int n ;
n2 t2 ;

n4(int n) { this.n = n ; }

long nnnn()
{
t2 = new n2(this) ;
return t2.xx()*t2.xx() ;
}

n4(){}
}

class n2
{
n4 t4 ;

n2( n4  t4 ){this.t4 = t4 ;}

long xx()
{
return ( t4.n * t4.n );
}

n2(){}
}

class tnn
{
public static void main(String[] args)
{
int n=30 ;

n4 num = new n4(n) ;

System.out.println( n+"^4 = "+num.nnnn() ) ;
}
}


---------------------------------------------------------------------------------------

构造函数和析构函数函数是被编译器调用,前者在刚刚生成对象后被调用,后者在对象要消亡
时被调用,也就是调用完后,对象就被从内存里释放了。

---------------------------------------------------------------------------------------

static

该关键词会将成员静态化,也就是编译器在编译的时候直接创建该成员,为其分配内存。所以是可以直接使用,否则不能使用。

类里面,staic这就像是一个公因式。static成员 就是类生成的所有对象的共同点。所以一份就足够了。如果,如果不把它static化,那么每个对象里都会重复生成一个对象,很浪费内存的。

静态代码块: static {}

在类被装载的时候只执行一次的的代码块,一般用来对类进行初始化操作。

---------------------------------------------------------------------------------------

内部类

内部类成员在访问其他成员时,是从最里层的方法到最外层的类外逐步访问。

我把之前的4次方程序改了一下。

class n4
{
int n ;

n4(int n) { this.n = n ; }

class n2
{
long xx()  { return ( n*n ); }
}

long nnnn()
{
n2 t2 = new n2() ;
return t2.xx()*t2.xx() ;
}

n4(){}
}

class tnn
{
public static void main(String[] args)
{
int n=30 ;

n4 num = new n4(n) ;

System.out.println( n+"^4 = "+num.nnnn() ) ;

}
}


stati会使内部类成为外部类。不在属于当前类。

在外面使用内部类,要从内部类所在的最外层类逐层忘里创建实例,最后直到创建内部类。不然创建不了。方法里的内部类只能访问方法里的final变量。final变量会作为常量看待。生命周期长于其所在的方法。该变量只能在定义的时候赋值,不能第二次赋值。

---------------------------------------------------------------------------------------

JAVA文档注释 /** */

要记忆的规则蛮多的。感觉蛮好玩的。留在以后使用中去熟练了。要使用JAVADOC才可以哦。
使用文档注释的类必须是PUB的。

---------------------------------------------------------------------------------------

继承

继承好啊,给力啊,但是不能选着性的继承构造不安逸啊,还要从写一个构造调用父构造。而且,当继承层次很深的时候,就要求人的思路要很清晰,不然会晕死的。

多重基础虽然不可以,但是可以利用多层继承来简介实现,c1要继承c2,c3 ;可以这样c1<c2<c3;
这样就继承过来了。

不能继承父类私有的成员。

--------------------------------------------------

子类对象实例化

1: 为对象分配内存,对成员变量进行默认初始化。

2: 通过生成对象时调用的构造函数,对构造函数的的形式参数进行赋值。

3: 构造函数内有其他构造函数的调用,即this,就调用它,进入步骤2。

这些this调用完后,到6.

4: 显示或隐式的用super调用父类构造方法,要追溯到OBJECT.

5: 对成员变量进行显示初始化。

6: 继续执行当前构造函数的其余代码。

也就是:分配内存,进行默认初始化,然后执行完所以的构造函数 。

this 和 super不能同时出现在同一构造函数里。

原因很简单。因为在一个子类里,super是肯定会被调用。写不写出来都会被调用,写出来显示调用,不写,就被隐式调用。super总是会在最后一个this被调用后,被调用。也就是某一个this被用后,进入这个this然后就没有新的this了,这个时候就会调用super。但是super调用进去后,就不知道有没有其他this和super了。毕竟这并不和“this 和 super同时出现在同一构造函数”相矛盾。

this 和 super 只能现在构造函数的第一句。

这是子类实例化的规定,如果构造函数有THIS额SUPER就必须把它们放在第一句,不然编译是不会通过的。

--------------------------------------------------

覆盖“父类的方法”

用来覆盖的的方法的定义必须和被覆盖的方法的定义一样,访问权限不能被覆盖的方法弱。
覆盖后还想用父类的方法那就要加SUPER啦。

--------------------------------------------------

final

FINAL强调唯一行,不可更改行,对一些特殊的,或是需要保护的对象进行标记。

FINAL变量可以在构造函数里赋值。这个时候应该在每个构造函数里都做同意的初始化。

STATIC FINAL只能在定义时初始化。

--------------------------------------------------

抽象类

有抽象方法类,就必须是抽象类。抽象类不能实例化,继承抽象类的子类只要不完全覆盖抽象类的方法就又是一个抽象类。完全覆盖了抽象方法的子类才能实例化。ABSTRACT.

接口 INTERFACE

接口里的成员全部是 PUB的,而且变量默认为STATIC FINAL,所有方法都是抽象的,只能有常量。
EXTENDX 必须在 IMPLEMENTS之前. IMPLEMENTS放在要进行实现的类名之后。

继承抽象类的时候,都用实现关键字IMPLEMENTS。

* 看到SUN的编译工具出问题··我好开心啊。

--------------------------------------------------

对象的类型转换

父类 = 子类 ;子类 = (子类类型)父类;

老师真幽默··男人女人的列子··好有爱啊。

如果(C1 INSTANCEOF C2)C2 = (C1)C2 ;

所有类默认继承 OBJ。所以OBJ不是抽象类,没有抽象方法。

------------------------------------------------------------------------------------

多态

以不变应万变;复用性;扩充性;可维护性。接口真好。

匿名内部类 个人理解就是一个临时的类常量,就像给函数传递参数的时候,直接穿值。不需要传其他变量。

------------------------------------------------------------------------------------

异常

TRY{SOMETHINS}CATCH(Exception arg){ out--->arg.mes} FINALLY!!SYSTEM.EXIT.

throws Exception. 抛出异常,提示;丢弃。

这2个玩意可以增强程序的健壮性。

覆盖有异常的方法的时候,必须抛出相同的异常。覆盖父类的时候,抛出来的异常只能属于父类的异常。

------------------------------------------------------------------------------------



有包名的JAVA文件,编译后的CLASS要通过包名访问,而且在文价夹里,包名就是文件目录的结构。

包名 heima.oo.java 访问:heima.oo.java.classname 编译的CLASS在/heima/oo/java/

实际开发对要把CLASS放在一个包名里,而不是在缺省包里。

import 包名.*(或某一个类名) 可以在访问这个包或包中的某个类时,不加包名。但是
如果在IMPORT的多个包里都含有同一名的类,就必须写出完整的包名加类名。

------------------------------------------------------------------------------------

访问控制

PRIVATE 类内可见,只能被同一类的其他成员访问。

默认,就是不加访问控制的关键字 包内可见,可以被同一包的其他的类访问。

PROTECTED 子类可见 当然,对上面两种也可见。

PUBLIC 包外可见。其他包可以进行访问。

类只能是PUB或默认两种类型的。

------------------------------------------------------------------------------------

JAR 文件

用于查看,打开,生成 JAR的 工具。JAR文件就是包的集合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: