黑马程序员Java笔记——类与对象的初体验

来源:互联网 发布:java 创建多线程读sql 编辑:程序博客网 时间:2024/06/06 05:55

----------- android培训java培训、java学习型技术博客、期待与您交流! ---------

类与对象

关键词:类、主类、客户、对象、实例化、构造方法、数据域封装、静态变量、静态方法、实例变量、实例方法、匿名对象、权限、设置器、访问器、UML类图

一、引述

Java是面向对象的程序设计语言。如何理解面向对象,是学好Java的必要不充分条件。

类和对象的定义:类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的变量。

类和对象的关系:类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

——出自度娘

二、简述:

(1)类:代表现实生活中实体的在计算机中的反映,它有自己的状态和行为。类使用关键词class来标明,类名中每个单词的首字母都要大写。

1.1 一个类的状态也可以称之为属性或者特征,是指那些可以代表它们当前值的数据域。

1.2 一个类的行为也可以称之为动作,是为了完成指定的操作,由方法定义的。

1.3 主类:含义main方法的类被称为主类;Java中的类可以不含有main方法,目的是为主类提供服务;可以把两个类放在同一个文件中,但是文件中只有一个类名可以被声明为public即公共的。此外公共类名必须与文件名相一致

(2)对象:一个类可以看做一个模板,用来定义是什么,和干什么的。对象是类的一个实例,可以从一个类中创建多个实例,创建实例的过程称之为实例化。理论来讲:应该先有类,后有对象。

注释:术语中的 对象和实例经常可以互换的。

Java类中使用变量来定义数据域,使用方法来定义动作;同创建数组一样使用new操作符来创建对象。

语法如下,功能包括:声明对象的引用变量、创建对象、将对象的引用值赋给变量。

类名 对象引用变量名 = new 类名( )

(3)引用变量、引用类型:

3.1 引用变量名,指向存储该对象的内存地址值;对象是通过引用变量来访问的。

3.2 一个类基本可以看做是一个有程序员定义的类型。一个类就是一种引用类型,所以任何一种类型为类的变量,都可以引用该类的一个实例。

补充:在Java中,数组也被看做是对象,数组是由new操作符创建的,一个数组变量实际包含一个对数组引用的变量。

(4)访问对象的数据和方法:对象引用变量名 变量名/方法名

4.1 对象成员访问符:Java类中使用变量来定义数据域,使用方法来定义动作。在创建一个对象后,它的数据域和方法可以使用圆点运算符( . )来访问和调用。该运算符也被称为:对象成员访问符。语法:对象引用变量名 变量名/方法名。

4.2 实例变量、实例方法:类中的依赖于某个具体实例(对象)的变量称为实例变量;依赖于某个具体实例(方法)的变量称为实例方法,调用对象上的实例方法的过程被称为实例对象。补充:一个对象的实例变量和方法不能被同一个类的其他对象调用

4.3 静态变量、静态方法:类中不依赖于某个具体实例(对象)的变量称为静态变量,也称之为类变量。静态变量将变量存储在一个公共内存地址中,它可以让一个类的所有实例共享数据。同理类中也有不依赖于某个具体实例(对象)的方法称之静态方法。

声明一个静态变量或者定义一个静态方法的,就是在这个变量或者类前面加上修饰符static

补充:类中的常量是被该类中所有对象所共享的。因此,常量前被声明为:final static

调用静态变量/方法:可以通过引用变量名或者它们的类名来调用它们(实例变量/方法只能通过,变量引用名来调用)。但是,通常我们使用:类名 静态变量/名方法名 的方式来调用。

静态方法和变量可以在不创建对象的情况下访问;静态变量和静态方法既可以在实例方法中被调用,也可以在静态方法中被调用;但是,实例变量和实例方法只能在实例方法中被调用,不能在静态方法中调用

4.4 引用数据域和null值:数据域也可以是引用型的,如果一个引用类型的数据域没有引用任何对象。那么,这个数据域会有一个特殊的Java值 null(零的/无效的)。

补充:

引用数值类型的数据域的默认值是null;基本数值类型的默认值是0

boolean 类型的数值默认初始化是 falsechar型默认初始化值是’\u0000’。

但是Java并没有给方法中的局部变量默认值 。当调用值为null的引用类型变量时会发生异常。

5)构造方法:Java类中有一种特殊的方法,调用它的目的是创建一个类的新对象,并完成初始化动作。

构造方法的特性:

1)构造方法必须和所在类名具有相同的名字;构造方法也是以大写开头的。

2)构造方法没有返回值类型,甚至连void也没有。(常见的错误是把void放到构造方法前

3)构造方法在创建一个对象使用new操作符时调用。构造方法的作用是初始化对象。

4)构造方法也可以重载,但是就是说类可以有多个不同的构造方法,前提他们的参数列表不同,通常一个类提供一个没有参数的构造方法,这样的构造方法被称为无参构造方法。

5)一个类可以不定义构造方法,此时,系统会自动隐含定义一个方法体为空的无参数的构造方法,这个构造方法称为默认构造方法;当且仅当在类中没有明确定义任何构造方法时才会自动提供它

6)如果一个类不想被创建对象,那么可以把构造方法的权限声明为私有,即关键词private.

(6)匿名对象:创建一个对象把它赋值给一个变量,可以同对象引用变量名来访问引用对象;但是,有时候一个对象并不需要引用,此时可以创建一个对象直接调用他的方法或者数据域。由于这种创建对象的方式,没有变量名字,被称为匿名对象。

7)权限修饰符:

7.1可以在类、方法和数据域前使用public修饰符,它表示它们可以被任何其人类访问;

7.2如果没有声明修饰符,默认类、方法、数据域可以被同一个包内的任意一个类访问(包私有);

7.3如果权限为private则限定方法和数据域只能在它自己的类中访问。如果一个对象是在它自己的类中定义的,那么这个对象可以访问它的私有成员。

注意:修饰符private只能用在类成员变量上;而public则可以类或者类的成员上。在局部变量中使用private或者public都会引发编译错误

8)数据域封装:为了防止数据被篡改,同时为了使类便于维护,通常将数据域声明为私有private,这种做法被称为数据域的封装。通过访问器和设置器来操作私有变量。

8.1 get方法称为读取器 或者 访问器;它提供一个带有返回数据域的值。

8.2 set方法称为设置器 或者 修改器;它的操作可以给数据域设置新的值。

提示:一般get方法是带有返回值类型的方法;set方法是void方法。

(9)对象作为参数的用法:

9.1 可以给方法传递对象参数,就像数组可以作为方法的参数一样。

9.2 可以创建类对象的数组:类名[ ] 数组引用变量名 = new 类型[数组大小];

关于对象数组,当使用new操作符创建对象时,这个数组中的每个元素都是默认值为null的引用变量;知道对象元素被初始化完成。

(10)UML类图:统一建模语言(Unified Modeling LanguageUML)使用图形符号把类的模版和对象进行标准化图解。简称UML类图或者类图。

(11)不可变对象:通常创建一个对象后,它的内容是允许随后改变的,但是,也可以依照需求创建一个内容不可以改变的对象,称之为不可变对象。

一个类成为不可变对象,它需要满足的条件:

1. 所有数据域都是私有的。

2. 没有修改器set()方法。

3. 没有会返回指向可变数据域引用的访问器。

一个类的所有数据都是私有的且没有修改器,是成为不可变对象的必要不充分条件。

(12)变量的作用域:

目前遇到的变量: 局部变量、类变量、实例变量、静态变量、引用类型变量。

1)局部变量:局部变量的声明和使用都是在一个方法内部。

2)类变量:一个类的实例变量和静态变量称为类变量(或者数据域),无论类变量在何处声明,类变量的作用域是整个类。

类变量与局部变量的不同:

1)声明次数不同:类变量只能声明一次;局部变量可以一个在方法的不同嵌套块中,多次声明相同的变量名。

2)作用域不同:类变量的作用域是整个类;局部变量的使用范围是一个方法内部。

3)如果一个类变量和一个局部变量有相同的名字;那么局部变量优先使用,类变量会被隐藏

建议:为了避免混淆,除了方法中的参数,不要将实例变量或者静态变量的名字作为局部变量

(13)this 关键词的使用:

关键词this是调用对象本身的引用名,this的常见的使用是引用类的隐藏数据域;以及调用同一类的另一个构造方法

1)隐藏的静态变量可以使用:类名 静态变量名 的方式引用。

2)隐藏的实例变量可以使用:this . 实例变量名 的方式引用。

3)如果一个类有多个构造方法,最好使用this(参数列表)的方式来调用它们。

注意:Java要求,在构造方法中this(参数列表)语句,在其他任何语句之前

其实,每一个实例变量都属于一个this表示的实例,不过通常这个this被省略。


原创粉丝点击