面向对象上

面向对象

 

01、特征

(1)    封装(Encapsulation)

(2)    继承(Inheritance)

(3)    多态(Polymorphism)

 

02、类与对象

(1)    类是某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的个体也称实例(Instance)

(2)    类的定义

a)    类可以将数据和函数封装在一起,其中数据表示类的属性,函数表示类的行为。定义类就是要定义类的属性与行为(方法)。如下例子

Class Person{

   Intage;

   Voidshout()

{

   System.out.println(“oh,my god!”+age);

}

}

b)    类的属性也叫类的成员变量,类的方法也类的成员函数。一个类中的方法可以直接访问同类中的任何成员。

c)    如果一个方法中有与成员变量同名的局部变量,该方法中对变量名的访问是局部变量,而不再是成员变量。

(3)    对象的产生与使用

a) 要创建新的对象 ,需要用new关键字和想要创建对象的类名,如:Person p1= Person();

等号左边以类名Person作为 变量类型了一个变量P1就是对象引用句柄,对象的引用是在栈中分配的一个变量,对象本身是在堆中分配的。

 

03、匿名对象

(1)    创建完对象,在调用该对象的方法时,也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。例子如下

Class Person{

   Intage;

   Voidshout()

{

   System.out.println(“oh,my god!”+age);

}

}

Class compare{

Public static void main(String[] args){

   NewPerson().shout();

}

}

这句代码没有产生任何句柄,而是直接用new 关键字创建了Person类的对象并直接用了它的shout()方法,得出的结果和改写之前是一样的。这个方法执行完,这个对象也就变在了垃圾。

(2)    使用匿名对象 的两种情况:

a) 如果对一个对象 只需要进行一次方法调用,那么就可以使用匿名对象。

b)将匿名对象作为实参传递给一个函数调用.

 

04、实现类的封装性

(1)    如果片面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。

(2)    使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。

(3)    实现封装可以达到如下目的:

a) 隐藏类的实现细节;

b)让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

c) 便于修改,增强代码的可维护性;

d)可进行数据检查。

(4)在构造方法里不含返回值的概念是不同于“void”的,对于“public void Person()”这样的写法就不再是构造方法,而变成了普通方法,很多人都会犯这样的错误,在定义构造方法时加了“void”,结果这个方法就不再被自动调用了。

 

05、构造方法

(1)    在Java的每个类里都至少有一个构造方法,如果程序员没有在一个类里定义构造方法,系统会自动为这个类产生一个默认的构造方法,这个默认构造方法没有参数,在其方法体中也没有任何代码,即什么也不做。

(2)    构造方法一般都是public的,因为它们在对象产生时,会被系统自动调用。

(3)    构造方法的重载:具有不同个数或不同类型的参数。

 

 

06、this引用句柄

(1)    哪个对象调用它,它就代表哪个对象。

(2)    构造方法是在产生对象时被Java系统自动调用的,我们不能在程序中像调用其他方法一样去调用构造方法。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数值列表,选择相应的构造方法。

Public clsaa Person

{

  String name;

   Intage;

   PublicPerson(String name)

    This.name = name;

}

 

Public Person(String name,int age)

{

    This(name);

    This.age = age;

}

}

在类Person的第二个构造方法中,我们通过this(…)调用,执行第一个构造方法中的代码。

 

07、垃圾回收有关的知识

(1)    Finalize方法。

a) finalize()方法是Object类的一个方法,任何一个类都从Object那继承了这个方法。

b)finalize()方法是在对象被当成垃圾从内在中释放前调用,而不是在对象变成垃圾前调用。

(2)    System.gc的作用

a) Java里提供了一个System.gc()方法,使用这个方法可以强制启动垃圾回收器来回收垃圾。

 

 

08、函数的参数传递

(1)    基本数据类型的参数传递:方法的形式参数就相当于方法中定义的局部变量,方法调用结束时也就被释放了,不会影响到主程序中同名的局部变量。

(2)    引用数据类型的参数传递:对象的引用变量度不是对象本身,它们只是对象的句柄(名称)。

 

 

09、staticd关键字

(1)    我们不能把任何方法体内的变量声明为静态。

(2)    用static标识答修饰的变量,它们在类被载入时创建,只类存在,static变量就存在。

(3)    类的静态成员经常被称作“类成员”(class menbers),对于静态成员变量,我们叫类的属性(class attributes),对于静态成员方法,我们在方法(class methods)。

(4)    在作用类的静态方法时,要注意以下几点:

a) 在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。对于非静态成员和变量,需要先他创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。

b)静态方法不能以任何方式引用this和shuper关键字。

c) Main()方法是静态的,因此JVM在执行main方法时不创建main方法所有的类实例对象,因而在main()方法中,不能直接访问该类中的非静态成员,必须创建该类的一个实例后,才能通过这个对象 去访问类中的非静态成员。

(5)    静态代码块

a) 一个类中可以使用不包含在任何方法体中的静态代码块(static block),当类被载入时,静态代码块被执行,且只被执行一次,静态块经常用来进行类属性的初始化。

 

10、单态设计模式

如果要让类在一个虚拟机中只能产生一个对象,首先必须将类的构造方法的访问权限设置为private,这样,就不能用new 操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。因为在类的的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

 

11、理解main方法的语法

由于Java虚拟机需要调用类的main()方法。所以该方法的访问权限必须是public,又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个Sting类型的数组参数,该数组中保存执行Java命令时传递给运行的类的参数。

 

12、内部类

(1)嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。

(2)和外部类不同的是,内部类可以声明为private或protected

(3)内部类使得程序代码更为紧凑,程序更具模块化。

(4)内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为publci即可。

(5)嵌套类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。

(6)在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,它的生命周期走出方法运行的生命同期。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值