Java作为一种面向对象语言。支持以下基本概念: 多态、继承、封装、抽象、类、对象、实例、方法、重载。
我们重点研究对象和类的概念:
对象 : 对象具有状态和行为.例如:一只狗的状态 - 颜色,名称,品种以及行为 - 摇尾巴,吠叫,吃东西.对象是类的实例。
类 : 可以将类定义为模板/蓝图,描述其类型对象支持的行为/状态。
Java中的对象:
现在让我们深入了解什么是对象,
如果我们考虑现实世界,我们可以在我们周围找到许多物体,汽车,狗,人等.所有这些物体都有状态和行为。
如果我们考虑一只狗,然后它的状态是 - 名称,品种,颜色,行为是 - 吠叫,摇尾巴,跑步。
如果你将软件对象与真实世界的对象进行比较,具有非常相似的特征。
软件对象也有状态和行为.软件对象的状态存储在字段中,行为通过方法显示。
因此在软件开发中,方法对对象的内部状态进行操作,并且对象到对象的通信完成通过方法。
Java中的类:
类可以看成是创建Java对象的模板。
一个类可以包含以下任何变量类型:
本地变量 : 在方法,构造函数或块中定义的变量称为局部变量.变量将在方法中声明和初始化,并且当方法完成时变量将被销毁。
实例变量&minus ;实例变量是类中的变量,但在任何方法之外.在实例化类时初始化这些变量。可以从该特定类的任何方法,构造函数或块内部访问实例变量。
类变量 : 类变量是在类中,在任何方法之外使用static关键字声明的变量。
一个类可以有任意数量的方法访问各种方法的价值.在下面的例子中,barking(),hungry()和sleeping()是方法。
以下是一个班级的示例:
public class Dog { String breed; int age; String color; void barking() { } void hungry() { } void sleeping() { } }
构造方法:
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造器仅有一个参数:name } }Java还支持 Singleton类,您只能创建一个类的实例.
创建对象:
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
一、声明:声明一个对象,包括对象名称和对象类型。
二、实例化:使用关键字new来创建一个对象。
三、初始化:使用new创建对象时,会调用构造方法初始化对象。
public class Puppy{ public Puppy(String name){ //这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public static void main(String[] args){ // 下面的语句将创建一个Puppy对象 Puppy myPuppy = new Puppy( "tommy" ); } }
编译并运行上面的程序,会打印出下面的结果:
小狗的名字是 : tommy
访问实例变量和方法:
通过创建的对象访问实例变量和方法.要访问实例变量,以下是完全限定的路径 :
/* 实例化对象 */ Object referenceVariable = new Constructor(); /* 访问类中的变量 */ referenceVariable.variableName; /* 访问类中的方法 */ referenceVariable.methodName();
示例:
此示例说明如何访问类的实例变量和方法.
public class Puppy{ int puppyAge; public Puppy(String name){ // 这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public void setAge( int age ){ puppyAge = age; } public int getAge( ){ System.out.println("小狗的年龄为 : " + puppyAge ); return puppyAge; } public static void main(String[] args){ /* 创建对象 */ Puppy myPuppy = new Puppy( "tommy" ); /* 通过方法来设定age */ myPuppy.setAge( 2 ); /* 调用另一个方法获取age */ myPuppy.getAge( ); /*你也可以像下面这样访问成员变量 */ System.out.println("变量值 : " + myPuppy.puppyAge ); } }
编译并运行上面的程序,产生如下结果:
小狗的名字是 : tommy 小狗的年龄为 : 2 变量值 : 2
源文件声明规则:
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。
一个源文件中只能有一个public类
一个源文件可以有多个非public类
源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
如果一个类定义在某个包中,那么package语句应该在源文件的首行。
如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。这些将在访问控制章节介绍。
除了上面提到的几种类型,Java还有一些特殊的类,如:内部类、匿名类。
Java包:
包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。
导入语句:
在Java中,如果给出了包含包和类名的完全限定名称,则编译器可以轻松找到源代码或类. Import语句是一种为编译器提供正确位置以查找特定类的方法.
例如,以下行将要求编译器加载目录java_installation/中可用的所有类. java/io :
import java.io.*;
一个简单的例子:
我们将创建两个类.它们是Employee和EmployeeTest.
首先打开记事本并添加以下代码.记住这是Employee类,类是公共类.现在,使用名称Employee.java保存此源文件.
Employee类有四个实例变量 - 名称,年龄,名称和工资.该类有一个显式定义的构造函数,它接受一个参数.
import java.io.*; public class Employee{ String name; int age; String designation; double salary; // Employee 类的构造器 public Employee(String name){ this.name = name; } // 设置age的值 public void empAge(int empAge){ age = empAge; } /* 设置designation的值*/ public void empDesignation(String empDesig){ designation = empDesig; } /* 设置salary的值*/ public void empSalary(double empSalary){ salary = empSalary; } /* 打印信息 */ public void printEmployee(){ System.out.println("名字:"+ name ); System.out.println("年龄:" + age ); System.out.println("职位:" + designation ); System.out.println("薪水:" + salary); } }
处理从main方法开始.因此,为了让我们运行这个Employee类,应该有一个main方法,并且应该创建对象.我们将为这些任务创建一个单独的类。
以下是 EmployeeTest 类,它创建Employee类的两个实例并为每个对象调用方法为每个变量赋值。
将以下代码保存在EmployeeTest.java文件中。
EmployeeTest.java 文件代码:
import java.io.*; public class EmployeeTest{ public static void main(String[] args){ /* 使用构造器创建两个对象 */ Employee empOne = new Employee("dandelioncloud1"); Employee empTwo = new Employee("dandelioncloud2"); // 调用这两个对象的成员方法 empOne.empAge(26); empOne.empDesignation("高级程序员"); empOne.empSalary(10000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("普通程序员"); empTwo.empSalary(5000); empTwo.printEmployee(); } }
编译这两个文件并且运行 EmployeeTest 类,可以看到如下结果:
public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造器仅有一个参数:name } }0
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。