类和对象
我们可以把类当成一种自定义数据类型,可以使用类来定义变量,这种类型的变量统称为引用型变量,也就是说,所有的类是引用数据类型。
定义类:面向对象的程序设计过程中有两个重要概念:类(class)和对象(object也被称为实例instance)
其中类是某一批对象的抽象,可以把类理解成某种概念;对象才是一个具体存在的实体。
Java语言是面向对象的程序设计语言,类和对象是面向对象的核心,Java语言提供了对创建类和创建对象简单的语法支持。
Java语言里定义类的简单语法如下:
[修饰符] class 类名
{
//属性 方法
}
在上面的语法格式中,修饰符可以是public,final,或者完全省略中两个修饰符,类名只要是一个合法的标识符 即可,但是这仅仅满足Java语法的要求,从程序的可读性方面来看,Java类名必须是一个或多个有意义的单词连缀而成,每个单词首字母大写,其他字母全部小写,单词与单词之间不需要使用任何分隔符。
对于一个类而言,可以包含三个最常见的成员:构造器 ,属性,方法 ,三种成员都可以定义零个或多个,如果三种成员都定义零个,就只定义了一个空类,这没有太大事务意义。
属性用于定义该类活该类的实例所包含的数据,法法则用于定义该类活该类的实例的行为或功能实现,构造器用于构造该类的实例,Java原因通过new关键字来调用构造器,从而返回该类的实例。
构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此Java语言提供了一个功能,如果程序员没有为一个类编写构造器,系统会为该类提供一个无参构造器,一旦程序员为一个类提供构造器,系统将并不会为该类提供构造器。
定义属性的语法:
[修饰符] 属性类型 属性名 [=默认值]
属性语法格式的详细说明:
修饰符:修饰符可以省略,也可以是public,protected,private,static ,final 其中public protected private三个最多只能出现其中之一,可以与static final组合起来修饰属性。
属性类型:属性类型可以是Java语言允许的任何额数据类型,包括进本类型和引用类型。
默认值:定义属性还可以定义一个可选的默认值。
定义方法的语法格式:
[修饰符] 方法返回值类型 方法名 (形参列表)
{
;;;;;
}
方法体里面多条 可执行性与之间有严格的执行顺序 排在方法体前面的语句总是先执行,排在方法体后面的语句总是后执行。
不使用static 修饰的普通方法,属性则属于该类的单个实例,而不是属于该类,因为通常把不使static修饰的属性和方法也称为实例属性,实例方法。
定义构造器的语法格式:
[修饰符] 构造器名 (形参列表)
{
。。。。。。。。。构造器执行体
}
构造器不能定义返回值类型声明,也不能使用void 定义 构造器没有返回值,
如果构造器定义了返回值类型,或使用void定义构造器定义构造器没有返回值,编译时不会报错会把所谓的构造器当做方法来处理
对象的this引用:
Java提供了一个this关键字,this关键字是一个对象的默认引用,this关键字总是指向调用该方法的对象,根据this出现的位置不同,this作为对象的默认易用有两种情形
(1):构造器中引用该构造器执行初始化的对象
(2):在方法中引用调用该方法的 对象。
this关键字最大的作用就是让类中一个方法,访问该类的另一个方法或属性。
方法详解
方法是类或对象的行为特征的抽象,方法是类或对象最重要的组成部分,但从功能上来看,方法完全类似与传统结构化程序设计里的函数,Java里的方法不能独立存在,所有的方法都必须定义在类里。方法在逻辑上要么属于类,要么属于对象。
Java语言里的方法的所属性主要体现在如下几个方面;
(1):方法不能独立定义,方法只能在类型里定义。
(2):从逻辑意义上看,方法要么鼠疫一个类,要么属于一个对象。
(3):永远不能独立执行方法,执行方法必须使用类或对象作为调用者。
递归方法
一个方法体内调用它自身,被称为方法的递归。方法递归包含了一种隐式的循环,它会重复执行某段 代码,但这种重复执行无须循环控制。
只要一个方法的方法体实现了再次调用了方法本身,就是递归方法,递归一定要向已知方向递归 。
方法重载
Java允许同一个类里定义 多个同名方法,只要参数列表不同就可以,如果同一个类里包含了两个或两个以上方法的方法名相同 ,单参数列表不同,则被称为方法重载。
在 Java程序中 需要确定一个方法 需要三个要素:
(1):调用者。也就是方法的所属者,既可以是类,也可以是对象。
(2):方法名:方法的标识。
(3):形参列表:当调用方法时,系统将会根据传入的实参列表匹配 。
方法重载的要求就是两同,一不同:同一个类中方法名相同,参数列表不同,至于方法的其他部分,如方法的返回值类型,修饰符等,与方法 重载没有任何关系。
成员变量和局部变量
成员变量指的是在类范围里定义的变量,也是前面所说的属性;
局部变量指的是在同一个方法内定义的变量。不管是成员变量,还是局部变量,都应该遵守相同的命名规则:从语法的角度上是一个合法的标识符即可,
局部变量分类:
(1)形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效。
(2)方法局部变量:在方法体内定义的局部变量,它的作用是从定义该变量的地方生效,到该方法结束时失效。
(3)代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效。
与成员变量不同的是,局部变量出了形参之外,都必须显式初始化,也就是说,必须献给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们。
隐藏和封装
封装是面向对象的三大特征之一(另外两个是继承和多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过类所提供的方法来实现对内部信息的搞作和访问。
对一个类或对象实现良好的封装,可以实现以下目的:
1:隐藏类的实现细节。2:让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里假如控制逻辑,限制对属性的不合理访问。3:可进行数据检查,从而有力保证对象信息的完整性。4:便于修改,提高代码的可维护性。
为了实现想好的封装,需要从两个方面考虑:
(1)将对象的属性和实现细节隐藏起来,不允许外界直接访问。
(2)把方法暴露出来,让方法来操作或访问这些属性。
因此,封装实际上有两个方面的含义:把该隐藏的隐藏起来,把该暴露的暴露出来。
Java提供了三个访问控制符:private protected 和public
private 本类
默认(default) 本类 同包
protected 本类 同包 子类
public 本类 同包 子类 其他
import
如果需要使用不同的包中的其他类型时,总是需要使用该类的全名,这是一件非常麻烦的事情。
为了 简化程序,Java引入了import关键字,import可以向某个Java文件中导入指定宝层次下的某各类或全部类,import应该出现在package语句(如果有的话)之后,类定义之前,一个Java源文件只能包含一个package语句,可以包含多个import语句用于导入多个包层次下的类
Java的常用包