1.
对象
通常将对象划分成两个部分,
静态方法和动态部分
。
静态方法,
就是不动的部分,这个部分被称为
“属性”
,
任何对象都会就要自身的属性,如一个人,其属性包括高矮,胖瘦等。
动态部分
是这个人具有的
行为
,如微笑,行走等
(1)
抽象出对象
(2)
识别对象的属性(静态属性)
(3)
识别对象的动态行为
可以将这些属性和行为封装在一起来描述这个对象
2.
类
不能将所谓的一个事物描述成一类事物,如一个鸟不能说成鸟类,如果要对一类事物统称,就需要引入类这个概念。
类是一类事物的统称,如人类,鸟类。类是构造对象所依赖的规范,如一只鸟有一对翅膀,它可以利用翅膀来飞行,而基本上所有的鸟类都具有翅膀和飞行的技能,这样具有相同属性和行为的一类事物就定义类
3.
面向对象的三个特征
1.
封装性
将对象的属性和行为封装在一起,其载体是类
,
类通常对客户隐藏其实现的细节。
保证了类内部数据结构的完整性,应用该类的用户不能轻易直接操作此数据结构
,只能执行类允许公开的数据。这样就避免外部操作内部数据的影响,提高了程序的可维护性
2.
继承性
类与类之间同样具有关系,主要利用特定对象之间的特定的共有属性
,例如,
平行四边形是四边型,正方形和矩形也是四边形,可以把平行四边形看作四边形的延伸
,平行四边形复用了四边形的属性和行为,同时添加了平行四边形独有的属性和行为,这里可以将平行四边形看作是从四边形类中继承的。平行四边形称为子类,四边形称为父类,子类的事例都是父类的事例。
3.
多态性
每个图型都有自己的特征,抽象类不能实例化对象
。在多态的机制中,父类通常定义为抽象类,在抽象类中提供给一个方法的标准,而不给出的具体的实现流程,实际上这个方法也是抽象的,在多态机制中,比抽象类更方便的方式是将抽象类定义为接口,其抽象方法组成的集合就是接口。
1.
成员变量
在
java
中对象的
属性
也称为成员变量
2.
成员方法
在
java
语言中使用成员方法对应类对象的
行为
。
权限修饰符
返回值类型
方法名
(参数类型
参数名)
{
//
方法体
Return
返回值
}
3.
权限修饰符
1. Private
如果一个类的成员变量或成员方法被修饰为
private,
则该成员变量只能在
本类
中被使用
,在子类也是不可见的,并且对其他包的类也是不可见的。
2. Public
除了在本类中使用这些数据外,还可以在子类和其他包的类中使用。
3. Protected
只有本包内的该类的子类能够使用
访问包位置
|
|
类修饰符
| |||
Private
|
protected
|
public
|
|
| |
本类
|
可见
|
可见
|
可见
|
|
|
同包其他类或子类
|
不可见
|
可见
|
可见
|
|
|
其他的包类或子类
|
不可见
|
不可见
|
可见
|
|
|
Class anyclas{
Public void doString(){
...//
方法体
}
}
如果一个类不被
public private protected
设置类的权限,则这个类预设为包存取范围,其只有一个包中的类可以调用这个类的成员变量或成员方法。
上面这个例子中使用默认修饰符,即只有一个包内的其他类和子类可以对该类进行访问,
但是
doString()
方法是被
public
修饰,但是根据
JAVA
语言的规定,
类的权限设定会约束类成员的权限设定
4.
局部变量
在
成员方法
中定义一个变量,那么这个变量被称为局部变量
。
局部变量是在方法被执行时创建,在方法执行结束时被销毁。局部变量在使用时必须进行赋值操作或被初始化。
Public String getName(){
Int id=0; //
局部变量
setName(
“
java
”
);
Return id+this.name;
}
5.
局部变量的有效范围
可以将局部变量的有效范围称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止
6. this
关键字
有以下例子
public void setName(String name){ //
定义一个
setname
()方法
T
his.name
=name; //
将参数值赋予类中的成员变量
}
在
java
语言规定中,
用
this
关键字来代表
本类对象
的引用
。
This
关键字被隐式地用于引用对象的成员变量和方法,在上述代码中,
this.name
指的就是
BOOK
类中的
name
成员变量,而
this,name=name
中的第二个是形参
name.
事实上,
this
引用的就是本类的一个对象
,当局部变量或方法参数覆盖了成员变量时,上面这个例子就是
添加
this
关键字明确引用的是类成员还是局部变量或方法参数
。
如果省略
this
关键字直接写成
name=name;
那
么只是把参数
name
赋值给参数变量本身而已,成员变量
name
的值并没有改变
,
Public Book getBook(){
Return this; //
返回
BOOK
类的引用
}
方法的返回值类型为
book
类,所以方法体中使用
return this
这种形式将
book
类的对象进行返回
4.
类的构造方法
在类中除了成员方法之外,还存在一种特殊类型的方法,那就是构造方法。
构造方法是一个与类名的方法,对象的创建就是通过构造方法完成的。每当实例化一个对象时,类会自动调用构造方法。
构造方法有以下特点
:
1.
构造方法没有返回值
2.
构造方法的名称要与本类的名称相同。
3.
格式为:
public book(){
...//
构造方法体
}
在构造方法中可以为成员变量赋值
,
这样当实例化一个本类对象时,相应的成员变量也将被初始化
。
如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认的构造方法。
5.
静态变量,常量和方法
有
static
修饰的变量,常量和方法被称为静态常量,静态变量,静态方法
静态成员属于类所有
,区别于个别对象,可以在本类或其他类使用类名和
”
.
”
符调用静态成员。
class
$5{
final
static
double
PI
=3.1415;
//
此处如果没有用
static
修饰,在别的方法里面无法调用
int id;
public
static
void
method1() {
System.
out
.println("6666");
}
public
void
method2() {
System.
out
.println($5.
PI
);
System.out.println
(
$5.id
)
;
//
此处无法调用参数
Id,非静态变量
$5.
method1
();
}
}
Java
语言规定对于静态方法有两点规定:
1.
在静态方法中不可以使用
this
关键字。
2.
在静态方法中不可以直接调用非静态方法
3.
不能将方法体内部的局部变量定义为
static
4.
如果执行类时,希望先执行类的初始化动作,可以先使用
static
定义一个静态区域。
Public class example{
Static{
//some
}
}
红色块先执行
6.
类的主方法
Public class example(){
Public static void main(String[] args){
//dosomethings
}
}
1.
主方法是静态的,所以如要在主方法中调用其他方法,则该方法也要是静态的。
2.
主方法没有返回值
void
3.
主方法的形参为数组。其中
args[0]-args[n]
分别代表程序的第一个参数到第
n
个参数,可以使用
args.length
获取参数个数
7.
对象
Java
是一门面向对象的语言,对象由类抽象出来,所有的问题通过对象来处理,对象可以操作类的属性和方法 解决相应的问题。
1.
对象的创建
Test test =new Test();
类名
创建
Test
类对象
创建对象操作符
构造方法的参数
test
被创建出来后,就是一个对象的引用,这个引用在内存中为对象分配了存储空间
2.
访问对象的属性和行为
$4
test
=
new
$4();
test
.showArrays(
array
);
test
.transfer(
array
,
array2
);
System.
out
.println();
test
.showArrays(
array2
);
2.
对象的引用
类名
对象引用名称
3.
对象的比较
String
c1
=
new
String(
"abc"
);
String
c2
=
new
String(
"abc"
);
String
c3
=
c1
;
System.
out
.println((
c2
==
c3
));
//
比较对象的地址
false
System.
out
.println((c2.equals(c3)));
//true,形式上比较
System.
out
.println((
c1
==
c3
));
//
引用相同所以是
true
4.
对象的销毁
每个对象都有生命周期,
当对象的生命周期结束时,分配给对象的内存地址将会被回收,在其他语言中需要手动回收废弃的对象,但
java
拥有一套完整的垃圾回收机制
以下两种情况
1.
对象的引用超过其作用范围,这个对象将被视为垃圾
{
Example e =new Example();
}
2.
将对象赋值为
Null
{
Example e= new Example();
e=null; //
此时对象消亡
}
虽然垃圾回收机制已经很完善,但只能回收由
new
操作符创建的对象
。如果某些对象不是通过
New
操作符在内存中获取一块内存区域,这种对象可能不能被垃圾回收机制所识别,
所以在
java
中提供了一个
finalize()
方法。
这种方法是
object
类,它被声明为
protected,
用户可以在自己的类中定义这个方法。如果用户在类中定义了
finalize
()方法
,
在垃圾回收时会首先调用该方法,在下一次垃圾回收动作发生时,才能真正被对象占用
。
有时候垃圾回收机制没有按预期的来执行,
java
提供了
System.gc()
方法强制启动垃圾回收器。
作
业
1.
尝试编写一个类,定义一个
private
变量,并定义两个成员方法,一个成员方法实现为此成员变量赋值,另一个方法获取这个成员变量的值,保证其他的类继承时能获取该成员变量的值。
public
class
$89 {
public
static
void
main(String[]
args
) {
//
TODO
自动生成的方法存根
$78
test
=
new
$78();
test
.test();
}
}
class
test2 {
private
int
a
;
//
只允许本类使用这个变量
void
method(
int
a
) {
this
.
a
=
a
;
}
public
int
method2() {
return
a
;
}
}
class
$78
extends
test2{
public
void
test(){
super
.method(78);
//super
关键字调用父类方法利用
method
方法修改
a
的值
int
a
=
super
.method2();
//
将修改改过的值赋给
a
System.
out
.println(
a
);
}
}