------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
进行Java程序设计,实际上就是定义类的过程。一个Java源程序文件往往是由许多个类组成的。从用户的角度看,Java源程序中的类分为两种:一是系统定义的类,即Java类库,二是用户自己定义的类。
Java中类包括成员变量和成员方法两部分。
成员变量 : 可以是基本数据类型的数据或者数组,也可以是一个类的实例;
成员方法 : 用于处理该类的数据的代码(也有的书叫函数)。
一、类的定义
定义和修饰类的关键字:
定义java类的关键字是class(字母全部小写),修饰类的关键字有public和default(可省略)、abstract 和final。
public:允许其他类(无论是包内的还是包外的)访问本类,一个源文件仅可以有一个public类,且必须与文件同名;
default:可被当前包中的其他类访问,但不能被包外的类访问;
abstract:没有实例的抽象概念类,即抽象类,一个类中若存在一个以上的抽象函数则这个类必须是抽象类;
final:不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类。
类的命名规则:
从语法上说,类的命名与成员变量的命名规则相同,即必须是子母,数字,下划线和“$”符号,且数字不能开头,但为了遵循国际惯例,一般定义类要以大写字母开头,如果类名由多个单词构成,则每一个单词的开头字母都要大写。
类的定义格式:
[类的修饰字] class 类名称 [extends 父类名称][implements 接口名称列表]
{
变量定义及初始化;
方法定义及方法体;
}
二、类中成员变量的声明:
成员变量声明的格式:
[变量修饰字] 变量数据类型 变量名1,变量名2[=变量初值]…;
变量修饰字:
访问控制符、static、final、volatile、transient
访问控制符(用来声明访问权限)
public:可被所有其他类引用;
protected:可被该类自身、子类、同一包中的其他类引用;
private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用;
default(可缺省):可被本包中的类引用;
static::要求成员对所有的实例一致,引用时前缀可使用类名或对象名;
final:数值不变常量,定义同时应对其进行初始化(定义这样的类成员一般要求所有字母大写,多个单词间用下划线分隔);
volatile:异步控制修饰符,表示多个并发线程共享的变量,这使得各线程对该变量的访问保持一致;
transient:与对象序列化有关的修饰符。
三、类中函数(方法)的定义
函数的定义格式:
[函数修饰字] 返回类型 方法名称(参数1,参数2,…) [throws exceptionList]
{
…(statements;) //方法体:方法的内容
}
函数修饰字:
访问控制符(用来控制访问权限,与成员变量修饰字类似);
static:静态方法,又称类方法,调用这种函数可使用类名或对象名作为前缀,建议使用类名,在方法体中只能使用static变量和static方法或访问自己的局部变量;
abstract(抽象函数):没有函数体的函数(无大括号“{}”),要在子类中通过重新定义来实现;
final:不能被重新定义。
throws:
抛出异常的关键字,通告本方法中会产生的异常类型。当执行此方法并发生了异常时,程序会转入调用者编制的异常处理程序段(try ...catch)。
四、创建对象
创建一个类,就创建了一种新的数据类型;声明一个类的变量,就是声明了该类的一个实例,即对象。创建对象包括声明对象、实例化对象即为对象分配存储空间两
步 。
声明对象:
格式:类名 对象名表;
例:InputStream inputStream1, inputStream2;
建立对象:
使用new运算符和类的构造方法为声明的对象分配内存空间,如果类中没有构造方法,系统会调用默认的无参构造方法。
格式:对象名=new 构造方法(形参列表);
例:inputStream1 = new InputStream();;
五、对象的使用:
在程序中创建对象的目的是使用对象。创建一个对象就要为对象的各个成员变量分配存储空间。可以通过引用对象的成员来使用对象。
对象数据成员的引用方式:
对象名.数据成员名
对象的成员方法的引用方式:
对象名.成员方法名(实际参数表)
六、对象的清除:
Java运行时系统通过垃圾自动回收机制周期性地释放无用对象所使用的内存,完成垃圾的自动回收。当一个对象的引用为空时,该对象称为一个无用对象。垃圾收集器以较低优先级在系统空闲周期中执行,一次垃圾的收集速度比较慢,在某些情况下,我们也可以通过调用System.gc()执行垃圾收集。
七、Java中的变量和方法
在类的数据成员和方法成员前用static关键字修饰的分别称为类变量和类方法,也称为静态变量和静态方法,非静态的又分别称为实例变量和实例方法。
在生成每个类的实例对象时,Java运行时系统为每个对象分配一块内存,然后可以通过对象引用变量来访问这些对象的实例变量。不同对象的实例变量是不同的。
变量的作用域:
实例变量,静态变量:整个类内,与顺序无关;
局部变量:从声明位置到块尾。
如果局部变量与实例变量重名,则局部变量优先,同名的实例变量或类变量被隐藏。此时,如果需要用到类变量,则需要使用关键字“this”
例:
class TestThis{
int year = 2013;
void setDay(int year){
this.year = year;
}
}
this关键字:
关键字“this”用来指向当前对象或类的实例变量,如果定义方法时需要用到当前对象,而当前对象未被实例化时,可使用“this”关键字表示。
八、包
包(package)是Java提供的文件(即公共类)的组织方式。一个包对应一个文件夹,一个包中可以包括许多类文件。包中还可以再有子包,称为包等级。
包的作用:
(1) 定位类;
(2) 避免命名冲突;
(3) 可以方便地分发软件;
(4) 控制类之间的访问(利用定义类时使用的修饰关键字public和default)
注:包是一个类名空间,同一个包中的类和接口不能重名,不同包中的类可以重名。
包的创建:
包的创建就是将源程序文件中的接口和类纳入指定的包。定义格式为:
package 包名;
例:
package net.csdn.blog
包是一种组织代码的有效手段,包名指出了程序中需要使用的.class文件的所在之处。另一个能指明.class文件所在的位置是环境变量CLASSPATH。 在WindowsXP或Windows2000中可以通过设置“我的电脑”属性来设置系统的环境变量。
对于Java Application程序,还可以通过为Java解释器设置参数来指定类文件路径。例如,对于JDK中的Java解释器java.exe,有开关参数-classpath;假设当需要解释执行的test.class文件不在当前目录而在e盘的TEMP目录下时,可以使用命令行语句:java -classpath e:\temp Test来运行这个程序。
开发中常用的包:
Java提供了丰富的标准类来帮助程序设计者更方便快捷地编写程序,这些标准类组成了类包,主要有:
除了java.lang之外,其余类包都不是java语言所必须的。若要使用,必须进行包的导入。
通常一个类只能引用与它在同一个包中的类。如果需要使用其它包中的public类,则可以使用如下的几种方法。
(1) 在引入的类前加包名
例如:java.io.InputStream();
(2) 用import关键字加载需要使用的类,例如上面的语句在程序开始处增加:
import java.io.*;语句之后,就可以直接写成:
InputStream();
九、内部类和匿名类
内部类:
一个类被嵌套定义于另一个类中,称为内部类(Inner Classes)或内隐类,包含内部类的类称为外部类。
例:
class PeopleCount{
…
public class People{ // 内部类People的定义
public People(){…}
public void output() {…} // 内部类的方法
}
public PeopleCount(String sn) {…} // 外部类的构造方法
public void output() {…} // 外部类的方法
}
public class TestInnerClass{…}
匿名类:
有时在定义事件处理代码时,由于代码短小,不必再明确定义一个类,可使用匿名内部类。匿名内部类是final(最终)类,非static类,匿名内部类将类的声明和创建类的实例一步完成。 主要应用在事件处理的代码编写中。
例:
Jbutton jb=new Jbutton(“exit”);
Jb.addActionListListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(-1);
}
}
);
十、类的封装性
封装性是面向对象程序设计语言的一个重要特性,大型软件设计的正确性和高效性的一个重要原则是模块化软件设计,保证模块正确性的基本方法是类的封装,那些允许其他包程序访问和修改的成员变量和方法可以定义为public类型;只允许同一个包中的其他类,以及该类的子类访问和修改的可以定义为protected类型;不允许其他类(内部类除外)访问和修改的可以定义为private类型。