Java从入门到放弃教程三 --java的对象和类
1、现实世界中,我们周围有很多对象,比如人,汽车,狗等。所有这些对象都有状态和行为。
类则是一个模板,它描述了自己可以创建什么样子的对象。
狗的类
public class Dog {
String breed;// 状态描述,品种
int age;//状态描述,年龄
String color;//状态描述,颜色
void barking() {//行为:狗叫
}
void hungry() {//行为:狗会饥饿
}
void sleeping() {//行为:狗睡觉
}
}

1、有三种变量:
在方法、构造函数或块内定义的局部变量−变量称为局部变量。该变量将在方法中声明和初始化, 并且该变量在方法完成后将被销毁。
实例变量−实例变量是类中的变量, 但在任何方法之外。在实例化类时, 将初始化这些变量。可以从该特定类的任何方法、构造函数或块内部访问实例变量。
类变量−类变量是在类中声明的变量, 在任何方法之外, 使用静态关键字。
1、每一个类都会有至少一个构造器。如果我们在类中不写构造器,java会自己创建一个默认的构造器。
每次对象被创建的时候(类实例化),那么构造器就会被调用执行。构造器的主要规则就是他们的名字要和
类名相同。
比如,我们定义一个小狗类
public class Puppy{
public Puppy(){
}
public Puppy(String name){
}
}

1、之前我们说过,【类】是【对象】的模板。所以对象是从类中创建出来的。类似工厂的模具,零件都是从模具中出来的。
在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.java
C:\javaapp>java Puppy
name的值为:tommy
C:\javaapp>

1、实例变量和方法可以通过创建对象来访问。
首先,创建一个对象:
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 );
}
}

2、编译运行结果:

1、 java使用包来管理【类】和【接口】;
如果给定了完全限定名,java编译器很容易定位到源代码。例如:
import java.io.*;//编译器将导入 java安装目录/java/io目录下面所有的类。
1、编写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);
}
}

1、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();
}
}

1、c:\javaapp>javac -encoding UTF-8 Employee.java
c:\javaapp>javac -encoding UTF-8 EmployeeTest.java
c:\javaapp>java EmployeeTest
名字:James Smith
年龄:26
职位:Senior Software Engineer
薪水:1000.0
名字:Mary Anne
年龄:21
职位:Software Engineer
薪水:500.0
