Java 教程
- Java - 首页
- Java - 概述
- Java - 历史
- Java - 特性
- Java vs. C++
- JVM - Java虚拟机
- Java - JDK vs JRE vs JVM
- Java - Hello World 程序
- Java - 环境搭建
- Java - 基本语法
- Java - 变量类型
- Java - 数据类型
- Java - 类型转换
- Java - Unicode 系统
- Java - 基本运算符
- Java - 注释
- Java - 用户输入
- Java - 日期和时间
Java 控制语句
- Java - 循环控制
- Java - 决策制定
- Java - if-else
- Java - switch
- Java - for 循环
- Java - for-each 循环
- Java - while 循环
- Java - do-while 循环
- Java - break
- Java - continue
面向对象编程
- Java - OOPs 概念
- Java - 对象和类
- Java - 类属性
- Java - 类方法
- Java - 方法
- Java - 变量作用域
- Java - 构造函数
- Java - 访问修饰符
- Java - 继承
- Java - 聚合
- Java - 多态性
- Java - 重写
- Java - 方法重载
- Java - 动态绑定
- Java - 静态绑定
- Java - 实例初始化块
- Java - 抽象
- Java - 封装
- Java - 接口
- Java - 包
- Java - 内部类
- Java - 静态类
- Java - 匿名类
- Java - 单例类
- Java - 包装类
- Java - 枚举
- Java - 枚举构造函数
- Java - 枚举字符串
Java 内置类
Java 文件处理
Java 错误和异常
- Java - 异常
- Java - try-catch 块
- Java - try-with-resources
- Java - 多重catch块
- Java - 嵌套 try 块
- Java - finally 块
- Java - throw 异常
- Java - 异常传播
- Java - 内置异常
- Java - 自定义异常
Java 多线程
- Java - 多线程
- Java - 线程生命周期
- Java - 创建线程
- Java - 启动线程
- Java - 线程合并
- Java - 线程命名
- Java - 线程调度器
- Java - 线程池
- Java - 主线程
- Java - 线程优先级
- Java - 守护线程
- Java - 线程组
- Java - 关闭钩子
Java 同步
Java 网络编程
- Java - 网络编程
- Java - 套接字编程
- Java - URL 处理
- Java - URL 类
- Java - URLConnection 类
- Java - HttpURLConnection 类
- Java - Socket 类
- Java - 泛型
Java 集合
Java 接口
Java 数据结构
Java 集合算法
高级 Java
- Java - 命令行参数
- Java - Lambda 表达式
- Java - 发送邮件
- Java - Applet 基础
- Java - Javadoc 注释
- Java - 自动装箱和拆箱
- Java - 文件不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 文件
- Java - 私有接口方法
- Java - 内部类菱形运算符
- Java - 多分辨率图像 API
- Java - 集合工厂方法
- Java - 模块系统
- Java - Nashorn JavaScript
- Java - Optional 类
- Java - 方法引用
- Java - 函数式接口
- Java - 默认方法
- Java - Base64 编码解码
- Java - switch 表达式
- Java - Teeing 收集器
- Java - 微基准测试
- Java - 文本块
- Java - 动态 CDS 归档
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指针异常
- Java - 打包工具
- Java - 密封类
- Java - 记录类
- Java - 隐藏类
- Java - 模式匹配
- Java - 简洁数字格式化
- Java - 垃圾收集
- Java - JIT 编译器
Java 其他
- Java - 递归
- Java - 正则表达式
- Java - 序列化
- Java - 字符串
- Java - Process API改进
- Java - Stream API改进
- Java - 增强的 @Deprecated 注解
- Java - CompletableFuture API改进
- Java - 流
- Java - 日期时间 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 类引用
- Java - Scanner
- Java - 数组
- Java - 字符串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用资源
Java - 类和对象
Java 是一种面向对象的编程语言。在 Java 中,类和对象是面向对象编程系统中基本的、重要的特性,Java 支持以下基本OOPs 概念:
- 类
- 对象
- 继承
- 多态性
- 封装
- 抽象
- 实例
- 方法
- 消息传递
在本教程中,我们将学习 Java 类和对象,类的创建和对象的创建,访问类方法等。
什么是 Java 类?
一个类是一个蓝图,从中创建单个对象(或者,我们可以说类是对象类型的一种数据类型)。在 Java 中,一切都是与类和对象相关的。每个类都有其可以方法和属性,可以通过对象访问和操作。
例如,如果您想为学生创建一个类。在这种情况下,“学生”将是一个类,而学生记录(如student1、student2 等)将是对象。
我们也可以认为类是一个工厂(用户定义的蓝图)来生成对象。
Java 类的属性
- 类不占用任何内存字节。
- 类就像一个现实世界中的实体,但它不是一个现实世界中的实体。它是一个蓝图,我们可以在其中指定功能。
- 类主要包含两部分:方法和数据成员。
- 类也可以是嵌套类。
- 类遵循 OOPs 的所有规则,例如继承、封装、抽象等。
类变量的类型
类可以包含以下任何变量类型。
局部变量 - 在方法、构造函数或块内定义的变量称为局部变量。变量将在方法中声明和初始化,并且当方法完成时变量将被销毁。
实例变量 - 实例变量是类中的变量,但在任何方法之外。当类被实例化时,这些变量被初始化。实例变量可以从该特定类的任何方法、构造函数或块中访问。
类变量 - 类变量是在类中声明的变量,在任何方法之外,使用 static 关键字。
创建(声明)Java 类
要创建(声明)一个类,需要使用访问修饰符后跟class关键字和类名。
创建 Java 类的语法
使用以下语法在 Java 中创建(声明)类
access_modifier class class_name{
data members;
constructors;
methods;
...;
}
Java 类的示例
在这个例子中,我们创建了一个名为`Dog`的类。该类的属性包括`breed`(品种)、`age`(年龄)和`color`(颜色)。类的方法包括`setBreed()`、`setAge()`、`setColor()`和`printDetails()`。
// Creating a Java class
class Dog {
// Declaring and initializing the attributes
String breed;
int age;
String color;
// methods to set breed, age, and color of the dog
public void setBreed(String breed) {
this.breed = breed;
}
public void setAge(int age) {
this.age = age;
}
public void setColor(String color) {
this.color = color;
}
// method to print all three values
public void printDetails() {
System.out.println("Dog detials:");
System.out.println(this.breed);
System.out.println(this.age);
System.out.println(this.color);
}
}
什么是Java对象?
一个对象是类类型的一个变量,它是面向对象编程系统的一个基本组成部分。一个类拥有方法和数据成员(属性),这些方法和数据成员可以通过对象访问。因此,对象是类的实例。
如果我们考虑现实世界,我们可以发现我们周围有很多对象,例如汽车、狗、人等等。所有这些对象都具有状态和行为。
如果我们考虑一只狗,那么它的状态是——名字、品种和颜色,而它的行为是——吠叫、摇尾巴和奔跑。
如果你将软件对象与现实世界中的对象进行比较,它们具有非常相似的特征。软件对象也具有状态和行为。软件对象的状态存储在字段中,行为通过方法体现。因此,在软件开发中,方法操作对象的内部状态,对象间的通信通过方法完成。
创建(声明)Java对象
如前所述,类为对象提供了蓝图。因此,基本上,对象是由类创建的。在Java中,`new`关键字用于创建新对象。
从类创建对象时,共有三个步骤:
声明——声明一个变量,该变量具有对象类型和变量名。
实例化——使用'new'关键字创建对象。
初始化——'new'关键字后跟对构造函数的调用。此调用初始化新对象。
创建Java对象的语法
考虑以下在Java中创建类对象的语法:
Class_name object_name = new Class_name([parameters]);
注意:参数是可选的,在使用类中的构造函数时可以使用。
创建Java对象的示例
在这个例子中,我们创建了一个名为`obj`的`Dog`类对象,并访问其方法。
// Creating a Java class
class Dog {
// Declaring and initializing the attributes
String breed;
int age;
String color;
// methods to set breed, age, and color of the dog
public void setBreed(String breed) {
this.breed = breed;
}
public void setAge(int age) {
this.age = age;
}
public void setColor(String color) {
this.color = color;
}
// method to print all three values
public void printDetails() {
System.out.println("Dog detials:");
System.out.println(this.breed);
System.out.println(this.age);
System.out.println(this.color);
}
}
public class Main {
public static void main(String[] args) {
// Creating an object of the class Dog
Dog obj = new Dog();
// setting the attributes
obj.setBreed("Golden Retriever");
obj.setAge(2);
obj.setColor("Golden");
// Printing values
obj.printDetails();
}
}
输出
Dog detials: Golden Retriever 2 Golden
访问实例变量和方法
实例变量和方法通过创建的对象访问。要访问实例变量,完整的路径如下:
/* First create an object */ ObjectReference = new Constructor(); /* Now call a variable as follows */ ObjectReference.variableName; /* Now you can call a class method as follows */ ObjectReference.MethodName();
示例
在这个例子中,我们创建了一个名为Puppy的类。在Puppy类的构造函数中,打印小狗的名字,以便在创建对象时打印其名字。添加了一个实例变量puppyAge,并使用getter/setter方法来操作年龄。在main方法中,使用new运算符创建一个对象。使用setAge()方法更新年龄,并使用getAge()打印年龄。
public class Puppy {
int puppyAge;
public Puppy(String name) {
// This constructor has one parameter, <i>name</i>.
System.out.println("Name chosen is :" + name );
}
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
System.out.println("Puppy's age is :" + puppyAge );
return puppyAge;
}
public static void main(String []args) {
/* Object creation */
Puppy myPuppy = new Puppy( "tommy" );
/* Call class method to set puppy's age */
myPuppy.setAge( 2 );
/* Call another class method to get puppy's age */
myPuppy.getAge( );
/* You can access instance variable as follows as well */
System.out.println("Variable Value :" + myPuppy.puppyAge );
}
}
输出
如果我们编译并运行上述程序,则会产生以下结果:
Name chosen is :tommy Puppy's age is :2 Variable Value :2
使用类和对象概念的规则
现在让我们看看源文件声明规则(使用Java类和对象方法)。这些规则在源文件中声明类、导入语句和包语句时至关重要。
每个源文件只能包含一个公共类。
源文件可以包含多个非公共类。
公共类名也应该与源文件名相同,并在末尾附加.java。例如:类名为public class Employee{},则源文件应为Employee.java。
如果类在包内定义,则包语句应为源文件中的第一条语句。
如果存在导入语句,则必须将它们写在包语句和类声明之间。如果没有包语句,则导入语句应为源文件中的第一行。
导入和包语句将应用于源文件中存在的所有类。不可能对源文件中的不同类声明不同的导入和/或包语句。
类具有多个访问级别,并且存在不同类型的类;抽象类、最终类等。我们将在访问修饰符章节中解释所有这些。
除了上述类型的类之外,Java还有一些特殊的类,称为内部类和匿名类。
更多关于Java类和对象的示例
示例1
Employee类有四个实例变量——姓名、年龄、职位和薪水。该类有一个显式定义的构造函数,它接受一个参数。
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
// This is the constructor of the class Employee
public Employee(String name) {
this.name = name;
}
// Assign the age of the Employee to the variable age.
public void empAge(int empAge) {
age = empAge;
}
/* Assign the designation to the variable designation.*/
public void empDesignation(String empDesig) {
designation = empDesig;
}
/* Assign the salary to the variable salary.*/
public void empSalary(double empSalary) {
salary = empSalary;
}
/* Print the Employee details */
public void printEmployee() {
System.out.println("Name:"+ name );
System.out.println("Age:" + age );
System.out.println("Designation:" + designation );
System.out.println("Salary:" + salary);
}
}
如本教程前面所述,处理从main方法开始。因此,为了运行此Employee类,应该有一个main方法,并且应该创建对象。我们将为这些任务创建一个单独的类。
示例2
以下是EmployeeTest类,它创建了Employee类的两个实例,并调用每个对象的方法为每个变量赋值。
将以下代码保存到EmployeeTest.java文件中。
import java.io.*;
public class EmployeeTest {
public static void main(String args[]) {
/* Create two objects using constructor */
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
// Invoking methods for each object created
empOne.empAge(26);
empOne.empDesignation("Senior Software Engineer");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
输出
现在,编译这两个类,然后运行EmployeeTest以查看以下结果:
C:\> javac Employee.java C:\> javac EmployeeTest.java C:\> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0