jdk10
vscode
现实世界中,我们周围有很多对象,比如人,汽车,狗等。所有这些对象都有状态和行为。类则是一个模板,它描述了自己可以创建什么样子的对象。狗的类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){ }}
之前我们说过,【类】是【对象】的模板。所以对象是从类中创建出来的。类似工厂的模具,零件都是从模具中出来的。在Java中,我们使用new这个关键词来创建一个新的【对象】只需3步,声明,实例化,初始化。请看例子:public class Puppy{ public Puppy(String name){ //构造函数(构造器) System.out.println('name的值为:'+name); } public static void main(String []args) { // 创建一个对象,叫做myPuppy // ①变量声明,指定类对象 ②new用来创建对象 ③ new后面跟着构造函数,对新的对象进行初始化。 // { ① } {② } { ③ } Puppy myPuppy = new Puppy( 'tommy' ); }}编译运行C:\javaapp>javac -encoding UTF-8 Puppy.javaC:\javaapp>java Puppyname的值为:tommyC:\javaapp>
实例变量和方法可以通过创建对象来访问。首先,创建一个对象:ObjectReference = new Constructor();现在可以访问变量了ObjectReference.variableName;还可以调用方法:ObjectReference.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' ); /* 调用【类】的方法来设置狗狗的年龄 */ myPuppy.setAge( 2 ); /* 调用【类】的方法来获取狗的年龄 */ myPuppy.getAge( ); /* 访问实例变量 */ System.out.println('变量的值 :' + myPuppy.puppyAge ); } }
编译运行结果:
java使用包来管理【类】和【接口】; 如果给定了完全限定名,java编译器很容易定位到源代码。例如: import java.io.*;//编译器将导入 java安装目录/java/io目录下面所有的类。
编写Employee.java文件import java.io.*;public class Employee { // 定义4个实例变量 String name; int age; String designation; double salary; // 员工类的构造函数 public Employee(String name) { this.name = name; } // 把员工的年龄赋值给内部的age变量. public void empAge(int empAge) { age = empAge; } /* 给职位赋值 */ public void empDesignation(String empDesig) { designation = empDesig; } /* 给薪水变量赋值 */ 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); }}
import java.io.*;public class EmployeeTest {public static void main(String args[]) {/* 通过构造器(构造函数)创建员工对象 */Employee empOne = new Employee('James Smith');Employee empTwo = new Employee('Mary Anne');// 调用每个对象方法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();}}
c:\javaapp>javac -encoding UTF-8 Employee.javac:\javaapp>javac -encoding UTF-8 EmployeeTest.javac:\javaapp>java EmployeeTest名字:James Smith年龄:26职位:Senior Software Engineer薪水:1000.0名字:Mary Anne年龄:21职位:Software Engineer薪水:500.0