一、基本概念
类是为了让程序设计语言能更加清楚地描述日常生活中的事物。是对某一类事物+的描述,是抽象的。
概念上的定义:而对象则是实际存在的属该类事物的具体的个体,所以也称为实例(instance)。
对象是类的一个实例,是实实在在的个体,一个类可以有多个对象。
面向对象程序设计思想的重点是类的设计而不是对象的设计。
类是由数据成员和函数成员封装而成的。数据成员则称为类的属性,函数成员则称为类的行为。
函数也称为方法,它可以简化程序的结构,也可以节省编写的相同代码的时间,达到程序模块化的目的。
使用方法 来编写程序可以把特定的功能的程序代码独立出来,这样可以简化代码、精简重复代码的程序流程。
所以总结来说就是类将某事物的数据与相关功能封装起来,形成一种特殊的数据结构,用以表达真实事物的一种抽象。
二、定义类
1、定义类实际上就是声明类的属性与方法。
结构:[类修饰符] class 类名称
{
[修饰符] 数据类型 成员变量名称;
[修饰符] 数据类型 成员变量名称;
.
.
[修饰符] 返回值的数据类型 方法名(参数1,参数2,...)//方法可以不带参数
{
语句序列;
return [表达式];//返回数据类型可以是没有返回值的类型void
}
.
.
}
//其中[]表示的内容都可以省略
2、分析类修饰符的用法
类修饰符一共有四种分别是public、abstract、final、缺省
一个类可以有多个修饰符,且无先后之分,但是abstract和final是相互对立,所以不能同时应用在一个类的定义中。
一个.java文件中可以有多个class(类),但是只能有一个是用public修饰符修饰的,而且这个类的名称必须与.java文件名相同。
修饰符 | 含义 |
public | 将一个类声明为公共类,它是可以被任何的对象访问 |
abstract | 将一个声明为抽象类,没有实现方法,需要子类提供方法实现,所以不能创建该类的实例 |
final | 将一个类声明为最终类即非继承类,表示它不能被其他的类所继承 |
缺省 | 缺省修饰符时,则表示只有在同包中的对象才能使用这样的类 |
3、成员变量
一个类的成员变量可以是简单的变量,也可以是对象数组等结构型数据。
[修饰符] 变量类型 变量名 [=初值];
4、分析成员属性的修饰符
成员属性的修饰符有访问控制符,静态修饰符,最终修饰符,过度修饰符,易失修饰符
一个成员变量可以被两个以上的修饰符同时修饰,但游戏王修饰符是不能同时定义在一起。
在定义类的成员修饰符的时候,可以读成员变量进行赋初值,表明成员变量的初始状态,但对成员变量的操作只能放在方法中。
修饰符 | 含义 |
public | 公共访问控制符,指定该变量为公共的,它可以被任何对象的方法访问。 |
private | 私有访问控制符。指定该变量只能同一个类(当前类)中的方法可以访问,其他类,(包括子类)不能访问此变量。 |
protected | 保护访问控制符。指定该变量只可以被它自己的类及其子类或同一包中的其他类访问,在子类中可以覆盖此变量。 |
缺省 | 缺省访问控制符时,则表示在同一个包中的其他类可以访问此成员变量,而其他包中的类不能访问该成员变量。 |
final | 最终修饰符。指定该变量的值不能改变。 |
static | 静态修饰符。指定该变量被所有对象共享,即所有的实例都可使用该变量。 |
transient | 过渡修饰符。指定该变量是一个系统保留,暂无特别作用的临时性变量。 |
volatile | 易失修饰符,指定该变量可以同时被几个线程控制和修改。 |
5、类的成员方法。
类的方法是用来定义对类的成员变量进行操作的,是实现类内部功能的机制,同时也是类与外界进行交互的重要窗口,声明方法的格式如下:
[修饰符] 返回值的数据类型 方法名(参数1,参数2,...)//可以不用添加参数
{
语句序列;
return [表达式];//可以是没有返回值的void型
}
6、分析成员方法的函数的修饰符
修饰符有多种:包括访问控制访问修饰符,静态修饰符,抽象修饰符,最终修饰符,同步修饰符和本地修饰符
同样的是方法的修饰符也是可以同时有多个,但是互斥的修饰符不能同时出现。
修饰符 | 含义 |
public | 公共访问控制符。指定该方法为公共的,它可以被任何对象方法访问 |
private | 私有访问控制符。指定该方法只允许自己类的方法访问,其他任何类(包括子类)中的方法均不能方法此方法。 |
protected | 保护访问控制符。指定该方法只可以被它的类及其或者同一包中的其他访问 |
缺省 | 缺省访问控制符,则表示在同一个包中的其他类可以访问此成员方法,而其他包中的类不能访问该成语方法 |
final | 最终修饰符。指定该方法不能被重载 |
static | 静态修饰符。指定不需要实例化一个对象就可以激活的方法 |
abstract | 抽象修饰符。指定该方法只声明方法头,而没有方法体,抽象方法需在子类中被实现 |
synchronized | 同步修饰符。在多线程程序中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程访问,运行结束后解锁 |
native | 本地修饰符。指定此方法的方法体是用其他语言(如C)在程序外部编写的。 |
7、总结一下四种访问修饰符的使用情况
作用域 | 当前类 | 同一包(package) | 子孙类 | 其他包(package) |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
friendly(缺省) | √ | √ | × | × |
private | √ | × | × | × |
friendly的情况是不写访问修饰符,就是缺省的情况,但是在Java中是不存在friendly这种情况的说法,它是 源自C++。
访问修饰符修饰class时只能是public,和缺省。并不鞥使用protected和private
而在使用访问修饰符修饰类的属性时,一般使用private,通过getter和setter方法来访问类的属性。
8、成员变量与局部变量的区别
由类和方法的定义可以,在类和方法中均可以定义属于自己的变量。类中定义的变量是成员变量,而方法中定义变量是局部变量。
(1)、从语法形式上看,成员变量是属性类的,而局部变量是在方法中定义的变量或者是方法的参数;成员变量可以被public、private、 static等修饰符所修饰,而局部变量则不能被访问修饰符及static所修饰;成员变量和局部变量都可以被final所修饰。
(2)、从变量在内存中的储存方式上看,成员变量是对象的一部分,而对象是存在于堆内存的,而局部变量是存在于栈内存的。
(3)、从变量在内存中的生存时间上,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法的结束而自动消失
(4)、成员变量如果没有被赋值,则会自动以类型的默认值赋值(有一种情况例外,被final西施但没有被static修饰的成员变量必须显式地赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。
三、对象的创建与使用
1、对象时整个面向对象程序设计的理论基础。
2、一个对象的声明周期:创建—>使用—>销毁
3、创建某类的对象步骤:
(1)、声明指向‘由类所创建的对象’的变量
(2)、利用new运算符创建新的对象,并指派给前面所创建的变量
例如:Object obj = new Object();//从内存的角度来分析就是,在栈内存中定义了一个变量obj,用来指向通过new运算符在堆内存中创建的一堆Object对象。也就是说变量obj是对存放在堆内存中对象的引用变量,因为它是指向Object类所创建的对象,所以可将视为‘‘对象的名称”,因而简称对象;事实上,obj变量只是对象的名称,它是指向对象实体的变量,而非对象本身。
4、因为在方法中定义的变量必须进行初始化,否则无法通过编译,所以当一个对象被创建时,会按照其的基本类型来成员变量的初始值。
5、通过对象来引用对象成员的格式如下:
对象.对象成员
6、匿名对象就是,不定义对象的引用变量,直接用new创建的对象来调用对象的方法等。如new Object().xxx();
7、使用匿名对象的两种情况:
(1)、如果对一个对象只需要进行一次的方法调用,那么就可以使用匿名对象。
(2)、将一个匿名对象作为参数传给方法调用时,可以使用。