Java入门第二季

1,类和对象

1,面向对象的概述

 对象为事物存在的实体

    对象通常以两个部分组成,动态部分和静态部分

    这些部分统统称为属性

    探讨对象的属性来观察,了解对象

2,类

将属性和行为封装起来,构成一个类

    类的实质就是封装的对象属性和行为的载体,而对象则是类抽象出来的实例

3,封装

把对象的属性和行为封装起来,其载体就是类

类通常隐藏其实现的细节

4,继承

类与类之间具同样具有关系,这种关系被称为关联。关联主要描述两个类之间的一般二元关系。

当处理一个问题时,可以将一些有用的类保留下来,当遇到同样的问题时拿来复用,可以减少使用过程中出现的错误的概率。

继承主要利用对象之间的共有属性。

5,多态

将父类现象应用于子类的特征就是多态。

6,成员变量

在Java中对象属性称为成员变量,成员变量为任意类型

7,成员方法

一个成员方法可以有参数,这个参数可以是对象,也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,如果方法需要返回值,可以在方法体中使用return关键字,使用这个关键字后,方法的执行将被终止。

8,权限修饰符

Java的权限修饰符主要包括private,public和protected

9,this关键字

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

其实,this除了可以调用成员变量和成员方法,还可以作为方法的返回值,如:

public Book getBook(){
return this;
}

10,类的构造方法

在类中,除成员方法外,还存在一种特殊类型的方法,那就是构造方法,构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,当类实例化一个对象时,类都会自动调用构造方法。

构造方法的特点如下:

构造方法没有返回值

构造方法的名称要与本类的名称相同

在类中除了成员方法外还有一个特殊类型的方法,那就是构造方法。

11,静态变量和静态方法

在介绍静态变量和静态方法前,首先需要介绍static关键字,因为由static修饰的变量和方法称为静态变量和静态方法。

被声明为static的变量和方法被称为静态成员,静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员

静态成员与静态方法的作用通常为了提供共享数据或方法,尽管使用这种方式调用静态成员比较方便,但静态成员同样遵循public,private和protected修饰符的约束

如果在执行类中,希望先执行类的初始化操作,可以使用static定义一个静态区域,这块区域也称为静态代码块,当类文件被执行时,会首先执行static块中的程序,并且只会执行一次

12,类的主方法

主方法是类的入口点,它定义了程序从何处开始,主方法提供对程序流向的控制,java编译器通过主方法来执行程

主方法具有以下特性:

主方法是静态的,所以如果要直接在主方法中调用其他方法,则该方法必须也是静态的

主方法没有返回值

主方法的形参为数组,其中,args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数

1,在eclipse中的MianDemo.java文件上单击鼠标右键,在弹出的快捷菜单中选择泽“运行方式”/“运行配置”(英文版为Run As/Run Configrations),弹出“运行配置”(Run Configrations)对话框

2,在“运行配置”对话框中选择“自变量”(Arguments)选项卡,在“项目”(Progran argumrnts)文本框输入相对应的参数,每个参数间按enter键隔开

3,单击“运行”按钮,查看控制台运行结果,结果如上:

如果不按以上操作,直接运行源码,则不会输出如何结果。

13,对象

1)对象的创建

在前面中讲解过对象,对象可以认为是在一类事物中抽象某一个特例,可以通过这个特例来处理这类事物出现的问题,在java语言中,通过new操作符来创建对象,在讲解构造方法时介绍过,每实例化一个对象就会自动调用一次构造方法,实质上这个过程就是创建对象的过程。准确的说,可以在java语言中使用new操作符调用构造方法创建对象

test构造方法的参数test对象被创建出来时,就是一个对象的引用,这个引用在内存中为对象分配了存储空间,可以在构造方法中初始化成员变量,当创建对象时,自动调用构造方法。也就是说,在 Java语言中,初始化与创建是被捆绑在一起的。每个对象都是相互独立的,在内存中占据独立的内存地址,并且每个对象都具有自己的生命周期,当一个对象的生命周期结束时,对象就变成垃圾,由 Java 虚拟机自带的垃圾回收机制处理,不能再被使用(对于垃圾回收机制的知识)。

2)访问对象的属性和行为

用户使用new操作符创建一个对象之后,可以使用“对象.类成员”来获取对象的属性和行为,前面已提到过,对象的属性和行为在类中是通过类的成员变量和成员方法的形式来表示的,所以当对象获取类成员时,也相应地获取了对象的属性和行为。

3)对象的引用

在java中,尽管一切都可以看作对象,但真正的操作标识符实质上是一个引用,那么引用在java中是如何体现的呢

实际上真正的对象是“new people()”这段代码,为了方便开发者保存,,调用对象,于是创建了一个people类型,名叫tom的引用变量。既然tom是new people的“代理人”,那么“new people()”对象能做的事情,tom也能做

4)对象的销毁

每个对象都有生命周期,当对象的生命周期结束时,分配给该对象的内存地址需要被回收。在其他语言中,需要用户手动回收废弃的对象。Java 拥有一套完整的垃圾回收机制,用户不必担心废弃的对象占用内存,垃圾回收器会自动回收无用却占用内存的资源。

在学习垃圾回收机制之前,读者首先需要了解何种对象会被 Java 虚拟机视为“垃圾”。主要包括以下两种情况:

1.对象引用超过其作用范围,这个对象将被视为垃圾
2.将对象赋值为null,但垃圾系统只能回收new操作符创建的对象,某些对象不是通过new操作符在内存中获取存储空间的,这种对象无法被垃圾回收机制识别,在java中,提供了finalize()方法,这个方法是object类的方法,它被声明为protected,用户可以在自已的类中定义这个方法,如果用户在类中定义了finalize()方法,在垃圾回收会首先调用该方法,在下一次垃圾回收动作发生时,才真正回收被对象占用的内存

2,继承,多态,抽象类和接口

1,类的继承

Java语言每个类只能继承一个父类

父类和普通类写法相同

public class 父类类名{

}

子类

public class 子类类名 extends 父类类名{

}

2,object类

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

(1)getClass()方法

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

(2)toString()方法

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

 (3)equals()方法

        在java语言中,有两种比较对象的方式,分别为“==”运算符与equals()方法。两者的区别在于:“==”比较的是两个对象引用内存地址是否相等,而equals()方法比较的是两个对象的实际内容。

3,对象类型的转换

(1)向上转型

向上转型的转换可以被理解为将子类类型的对象转换为父类类型的对象,即把子类类型的对象直接赋值给父类类型对象,进而实现按照父类描述子类的效果。

使用向上转型模拟如下场景:这里有一个人,他叫tom,他是一名教师。

class People { }

class Teacher extends People { }

public class Demo3 {

        public static viod main(String [] args) {

                People tom = new Teacher();

        }

}
(2)向下转型

 向下转型可以被理解为将父类类型的对象转换为子类类型的对象。但是,运用向下转型,如果把一个较抽象的类的对象转换为一个较具体的类的对象,这样的转型通常会出现错误。

4,使用instanceof关键字判断对象类型

 当在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCaseException异常,所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用instanceof关键字来完成。可以使用instanceof关键字判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。

5,方法的重载

方法的重载就是在同一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。   误区警示:虽然在方法重载中可以使用两个方法的返回类型不同,但只有返回类型不同并不足以区分两个方法的重载,还需要通过参数的个数以及参数的类型来设置。

6,final关键字

(1)final变量

final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值,通常,由final定义的变量为常量。

(2)final方法

将方法定义为final类型,可以防止子类修改父类的定义和实现方式,同时定义为final方法的执行效率要高于非final方法,在修饰权限中曾经提到了private修饰符,如果一个父类的某个方法被设置为private,子类该无法访问该方法,自然无法覆盖方法。

(3)final类

定义final的类不能被继承,如果希望一个类不被任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为final类

7,多态

利用多态可以使程序具有良好的扩展性,并可以将所有类对象进行通用的处理。

        假如现在要编写一个绘制图形的方法draw(),如果传入正方形对象就绘制正方形,如果传入圆形对象就会绘制圆形,这种场景可以使用重载来实现,定义如下:

        public void draw(Square s){                //绘制正方形的方法

        }

        public void draw(Circular c){                //绘制圆形的方法

        }

        但是这种写法有个问题:正方形和圆形都是图形,这场景细分的重载方式不仅增加了代码量,还降低了“易用度”。如果定义一个图形类,让它处理所有继承该类的对象,根据“向上转型”原则可以使每个继承图形类的对象作为draw()方法的参数,然后在draw()方法中做一些限定就可以根据不同图形类对象绘制相应的图形。这样处理能够很好地解决代码冗余问题,同时程序也易于维护。

8抽象类与接口

抽象方法

修饰符 abstract 返回参数 方法名(传入参数);

抽象类 有抽象方法的类一定是抽象类

修饰符 abstract class 类名{

}

父类为抽象类 子类为普通类

子类继承父类的抽象的方法会报错

利用重写可以使抽象方法变为普通方法

父类也可制定规则使得子类重写其中继承的抽象方法变为普通方法

9,接口

接口是所以方法都是抽象方法

修饰符 interface接口名{

}

Java语言每个类可以实现多个接口

实现 implements

修饰符 class 类名 implements 接口1,接口2{

}

一个类实现接口后只重写了部分方法 解决方法

1.将普通构造方法重写

2,将接口名更改为抽象类

3,包和内部类

1,创建包

建立包

定义包名为

package 包名

2,成员内部类

使用this关键字获取内部类与外部类的引用

3,匿名内部类

1.匿名类不能写构造方法。

        2.匿名类不能定义静态的成员。

        3.如果匿名类创建的对象没有赋值给任何引用变量,会导致该对象用完一次就会被java虚拟机销毁。

        说明:匿名内部类编译以后,会产生以“外部类名$序号”为名称的.class文件,序号以1~n排列,分别代表1~n个匿名内部类。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值