第二篇Java核心技术复习

一面向对象的概念

面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能,这样当应用程序功能发生变动时,只需要修改个别的对象就可以了,从而使代码更容易得到维护。

1封装性

封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想

2继承性

继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展

3多态性

多态性指的是在程序中允许出现重名现象,它指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语句

类的定义

在面向对象的思想中最核心的就是对象,为了在程序中创建对象,首先需要定义一个类。类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义成员变量和成员方法,其中成员变量用于描述对象特征,也被称作属性,成员方法用于描述对象行为,可简称方法


public class expl1 {
//	描述人事物
//	都是人的共性内容
	int age = 10;// 定义int类型变量age1定义speak()方法
	public void speak () {
		int age=60;
			System.out.println("大家好,我今年"+ age +"岁");
	}
 }

对象的创建与使用

应用程序想完成具体的功能,仅有类是远远不够的,还需要根据类创建实例对象。在java程序中可以使用new关键字来创建对象,具体格式如下:

类名 对象名称 =new 类名();

例如,创建person类的实例对象代码如下:

person p=new person();

类的设计

在Java中,对象是通过类创建出来的。因此,在程序设计时,最重要的就是类的设计。

类的封装

  在设计一个类时,应该对成员变量的访问作出一些限定,不允许外界随意访问,这就需要实现类的封装。
 所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰,私有属性只能在它所在类中被访问,如果外界想要访问私有属性,需要提供一些使用public修饰的公有方法,其中包括用于获取属性值的get()方法和设置属性值的set()方法。

构造方法

构造方法的定义

在一个类中定义的方法如果同时满足以下三个条件,该方法称为构造方法,具
体如下:
1、方法名与类名相同
2、在方法名的前面没有返回值类型的声明
3、在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束

构造方法的重载

  与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法只要每个构造方法的参数类型或参数个数不同即可。在创建对象时,可以通过调用不同的构造方法来为不同的属性进行赋值。

this关键字

this关键字用于表示本类当前的对象,当前对象不是某个new出来的实体对象,而是当前正在编辑的类,this关键字只能在本类中使用。

垃圾回收

在Java中,当一个对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足。针对这种情况,Java中引入了垃圾回收机制。有了这种机制,程序员不需要过多关心垃圾对象回收的问题,Java虚拟机会自动回收垃圾对象所占用的内存空间。

静态变量

在一个Java类中,可以使用static关键字来修饰成员变量,该变量被称作静态变量。静态变量被所有实例共享,可以使用“类名.变量名”的形式来访问。

注意: static关键字只能用于修饰成员变量,不能用于修饰局部变量否则编译会报错。 

静态方法

要实现这样的效果,只需要在类中定义的方法前加上static关键字即可,通常称这种方法为静态方法。同静态变量一样,静态方法可以使用“类名.方法名”的方式来访问,也可以通过类的实例对象来访问。

注意:在一个静态方法中只能访问用static修饰的成员,原因在于没有被static修饰的成员需要先创建对象才能访问,而静态方法在被调用时可以不创建任何对象。

静态代码块
在Java类中,使用一对大括号包围起来的若干行代码被称为一个代码块,用static关键字修饰的代码块称为静态代码块。当类被加载时,静态代码块会执行。由于类只加载一次,因此静态代码块只执行一次。在程序中,通常会使用静态代码块来对类的成员变量进行初始化

成员内部类

在Java中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可分为:成员内部类、静态内部类、方法内部类

在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。在成员内部类中,可以访问外部类的所有成员。如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象创建内部类对象的具体语法格式如下:
外部类名.内部类名变里名=new外部类名()new内部类名();

继承的概念

在Java中,类的继承是指在一个现有类的基础上去构建一个新的类构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字

在类的继承中,需要注意一些问题,具体如下

1在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类

2多个类可以继承一个父类

3在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如c类继承b类,而b类又可以去继承a类,这时,c类也可以称作a类的子类

重写父类方法

在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。需要注意的是,在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。

super 关键字

当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,在Java中专门提供了一个super关键字用于访问父类的成员。例如访问父类的成员变量、成员方法和构造方法。接下来分两种情况来学习一下super关键字的具体用法

1使用super关键字访问父类的成员变量和成员方法。具体格式如下:

super成员变量

super成员方法([参数1,参数2...])

2使用super关键字访问父类的构造方法。具体格式如下:

super([参数1,参数2...])

final  关键字

   final关键字可用于修饰类、变量和方法,它有“无法改变”或者“最终的含义,因此被final修饰的类、变量和方法将具有以下特性:

1.final修饰的类不能被继承。
2.final修饰的方法不能被子类重写。

3.final修饰的变量(成员变量和局部变量)是常量,只能赋值一次

final关键字修饰变量
Java中被final修饰的变量称为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。

抽象类

当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的。例如前面在定义Animal类时,shout()方法用于表示动物的叫声,但是针对不同的物,叫声也是不同的,因此在shout()方法中无法准确描述动物的叫声。针对上面描述的情况,Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰,具体示例如下:
abstzact void shout(); // 定义抽象方法 shout()


//抽象类的使用
// 定义抽象类Animal   
abstract class Animal{
	public abstract void shout(); //定义抽象方法
	public void sleep() {
		System.out.println("动物在睡觉");
	}
}
 
//Animal需要子类继承来使用
//定义Dog类继承Animal抽象类
  class Dog extends Animal{
	//重写父类的抽象方法,实习抽象方法
	public  void shout() {
		System.out.println("汪汪....");
	}
}
//定义测试类
public class example10 {
public static void main(String[] args) {
	Dog dog=new Dog();//创建Dog类的对象,创建的是抽象类的子类对象
	dog.shout();
	dog.sleep();
}

}

接口

如果在一个抽象类的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。接口是由常量和抽象方法组成的特殊类,是对抽象类的进一步抽象。

   使用接口可以实现多重继承,一个类可以同时实现多个接口,于是可以将所有需要继承的接口放置implements关键字后使用逗号隔开,实现多个接口语法如下:

修饰符 class 类名 implement 接口1,接口2....{
}

接口的特点

1接口中的方法都是抽象,不能实例化对象

2接口中的属性只能是常量

3当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法

4一个类通过impiements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开

多态概念
在设计一个方法时,通常希望该方法具备一定的通用性。例如要实现一个动物叫的方法,由于每种动物的叫声是不同的,因此可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫的叫声,传入犬类对象时就发出犬类的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态。继承是多态得以实现的基础。
在Java中为了实现多态,允许使用一个父类类型的变量来引用一个子类类型的
对象,根据被引用子类对象特征的不同,得到不同的运行结果。

多态的类型转换

对象类型的转换在java编程中经常遇到,主要包括向上转型和向下转型操作

1.向上转型

向上转型:将子类对象赋值给父类引用

(自动类型转换)

Animal  a=new Dog();
2.向下转型 

向下转型:将父类对象赋值给子类引用

(需要进行强制类型转换)

Dog a=(Dog) new Animal();

object类

  在Object类中,主要包括clone(),finalize(),equals(),toString()等方法,其中常用的两个方法为equals()和toString()方法。由于所有的类都是object类的子类,所以任何类都可以重写object类中的方法。

getClass()方法

getClass()方法是object类定义的方法,它会返回对象执行的Class实例,然后使用该实例调用getName()方法可以取得类的名称。语法如下:

getClass().getname();
 方法的重写

返回参数相同,方法名相同,传入参数相同,方法体不同

tostring()方法

tostring()的功能是将一个对象返回为字符串形式,它会返回一个String实例,在实际的应用中通常重写tostring()方法,为对象提供一个特定的输出的模式,当这个类转换为字符串或与字符串连接时,将自动调用用重写的tostring()方法。

equals()方法

在Java语言中,有两种比较对象的方式,分别为“==”运算符与equals()方法,两者区别在于:“==”比较的是两个对象引用内存地址是否相等,而equals()方法比较的是两个对象的实际内容,所以equals()方法判断出了这两个对象实际上是同一个,而“==”运算符无法做出有效判断,如果两个对象类型的不同,那么equals()方法就会认为两者都不同

匿名内部类

      在编写Java程序时,在类里面定义的类称之为内部类(InnerClass),内部类是外部类的一个成员。Java内部类可以分为:成员内部类、方法内部类和匿名内部类等。

       在前面多态的讲解中,如果方法的参数被定义为一个接口类型,那么就需要定义一个类来实现接口,并根据该类进行对象实例化。除此之外,还可以使用匿名内部类来实现接口。所谓匿名内部类就是没有名字的内部类,表面上看起来它似乎有名字,实际那不是它的名字。当程序中使用匿名内部类时,在定义图名内部类的地方往往直接创建该类的一个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值