java是面向对象的语言。 作为具有面向对象功能的语言,java支持以下基本概念 -
在本节中,我们将学习两个概念 - 类和对象。
下面将深入了解什么是对象。 如果考虑现实世界,可以在我们周围找到许多对象,如:汽车,狗,人等等。所有这些对象都有状态和行为。
如果考虑一只狗,那么它的状态是 - 名称,品种,颜色,并且它的行为是 - 吠叫,摇尾巴,跑步。
如果将软件对象与实际对象进行比较,则它们具有非常相似的特征。
软件对象也具有状态和行为。 软件对象的状态存储在字段中,行为通过方法显示。
因此,在软件开发中,方法对对象的内部状态进行操作,并且对象到对象的通信是通过方法完成的。
类是创建单个对象的蓝图(模板)。以下是一个类的示例代码。
public class dog {
string breed;
int age;
string color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
类可以包含以下任何变量类型。
static
关键字修饰,它是在类中的方法之外声明的变量。一个类可以有任意数量的方法。 在上面的例子中,barking()
,hungry()
和sleeping()
都是类的方法。
以下是在学习java语言类和对象时,需要了解的一些重要主题内容。
在讨论类时,最重要的子主题之一是构造函数。 每个类都有一个构造函数。 如果没有为类显式编写构造函数,java编译器会自动为该类构建一个默认构造函数。
每次创建新对象时,都将至少调用一个构造函数。构造函数的主要规则是它与类具有相同的名称。 一个类可以有多个构造函数。
以下是构造函数的示例 -
public class dog {
// 无参数构造函数
public dog() {
}
// 有参数构造函数
public dog(string name) {
// 此构造函数有一个参数:name。
}
}
java还支持单实例类,它是一种创建一个类只有一个实例设计模式。
注意 - 有两种不同类型的构造函数。 我们将在后续章节中详细讨论构造函数。
如前所述,类提供了对象的蓝图。一个对象是从一个类创建的。 在java中,new
关键字用于创建新对象。
从类创建对象时有三个步骤 -
new
关键字用于创建对象。new
关键字后跟对构造函数的调用,此调用初始化新对象。以下是创建对象的示例代码 -
public class dog {
public dog(string name) {
// 这个构造函数有一个参数:anem
system.out.println("传入的参数值是: " + name );
}
public static void main(string []args) {
// 以下语句将创建一个对象: mydog
dog mydog = new dog( "小屁狗" );
}
}
编译并执行上面示例代码,得到以下结果:
传入的参数值是: 小屁狗
通过创建的对象访问实例变量和方法。 要访问实例变量,以下是完全限定的路径 -
/* 首先创建一个对象 */
objectreference = new constructor();
/* 调用变量如下 */
objectreference.variablename;
/* 现在,可以按如下方式调用类方法 */
objectreference.methodname();
下面示例说明如何访问类的实例变量和方法。
public class dog {
int dogage;
public dog(string name) {
// 此构造函数有一个参数:name
system.out.println("设置的小狗名字是: " + name);
}
public void setage(int age) {
dogage = age;
}
public int getage() {
system.out.println("小狗的年龄是: " + dogage);
return dogage;
}
public static void main(string[] args) {
/* 创建对象 */
dog mydog = new dog("小屁狗");
/* 调用方法来设置狗的年龄 */
mydog.setage(2);
/* 调用另一个方法来获取狗的年龄 */
mydog.getage();
/* 也可以按如下方式访问实例变量:dogage */
system.out.println("变量的值是:" + mydog.dogage);
}
}
编译并执行上面示例代码,得到以下结果:
设置的小狗名字是: 小屁狗
小狗的年龄是: 2
变量的值是:2
在源文件中声明类,import
语句和package
语句时,这些规则是必不可少的。
public
类。public
类。public
类名称也应该是源文件的名称,最后以.java
作为扩展名。 例如:类名是public class employee{}
,那么源文件应该是:employee.java
。package
语句应该是源文件中的第一个语句。import
语句,则必须在package
语句和类声明之间写入它们。如果没有package
语句,则import
语句应该是源文件中的第一行。类具有多个访问级别,并且有不同类型的类; 抽象类,final
类等。我们将在访问修饰符章节中解释所有这些。
除了上面提到的类类型之外,java还有一些特殊类:内部类和匿名类。
简而言之,它是一种对类和接口进行分类的方法。 在java中开发应用程序时,将编写数百个类和接口,因此必须对这些类进行分类,以使生活变得更加容易。java包也是用于解决命名冲突的问题。
在java中,如果给出了包含包和类名的完全限定名称,则编译器可以快速地找到源代码或类。 import
语句是一种为编译器提供正确位置以查找特定类的方法。
例如,以下行将要求编译器加载目录java_installation/java /io
中可用的所有类 -
import java.io.*;
在这个学习案例中,将创建两个类。 它们是:employee
和employeetest
。
首先打开记事本并添加以下代码。employee
类是公共(public
)类。因此使用文件名称为:employee.java 保存此源文件。
employee
类有四个实例变量 - name
, age
, designation
和 salary
。 该类有一个显式定义的构造函数,它接受一个参数。
import java.io.*;
public class employee {
string name;
int age;
string jobposition;
double salary;
// 这是employee类的构造函数
public employee(string name) {
this.name = name;
}
// 设置员工的年龄,将empage的分配给变量:age。
public void empage(int empage) {
age = empage;
}
/* 设置员工的工作岗位. */
public void setjobposition(string jobposit) {
jobposition = jobposit;
}
/* 设置员工的薪水,将empsalary的分配给变量:salary。 */
public void empsalary(double empsalary) {
salary = empsalary;
}
/* 打印员工详细信息 */
public void printemployee() {
system.out.println("------------------------------------");
system.out.println("姓名:" + name);
system.out.println("年龄:" + age);
system.out.println("工作岗位:" + jobposition);
system.out.println("薪水:" + salary);
}
}
如本教程前面所述,程序从main
方法开始执行。 因此,要运行这个employee
类,应该有一个main
方法,并且应该创建对象。接下来将为这些任务创建一个单独的类:employeetest
。
在employeetes
t类中,它创建employee
类的两个实例,并为每个对象调用方法以为每个变量赋值。将以下代码保存在employeetest.java 文件中。
import java.io.*;
public class employeetest {
public static void main(string args[]) {
/* 使用构造函数创建两个对象 */
employee empone = new employee("maxsu");
employee emptwo = new employee("张小龙");
// 为每个创建的对象调用方法
empone.empage(26);
empone.setjobposition("高级软件工程师");
empone.empsalary(15999);
empone.printemployee();
emptwo.empage(42);
emptwo.setjobposition("产品经理");
emptwo.empsalary(999999);
emptwo.printemployee();
}
}
现在,编译这两个类,然后运行得到结果如下 -
d:/worksp/java> javac employee.java
d:/worksp/java> javac employeetest.java
d:/worksp/java> java employeetest
------------------------------------
姓名:maxsu
年龄:26
工作岗位:高级软件工程师
薪水:15999.0
------------------------------------
姓名:张小龙
年龄:42
工作岗位:产品经理
薪水:999999.0