类和对象一、基本概念1. 对象Object类的一个实例包含状态和行为状态变量属性行为方法操作2. 类Class创建对象的模板描述一类对象的行为和状态二、类的组成1. 变量Variable变量类型声明位置生命周期特点局部变量方法内部方法调用时创建结束后销毁短期使用成员变量类中方法外随对象创建而创建对象的个性属性如姓名吴彦祖类变量类中方法外带static类加载时创建所有对象共有属性2. 方法Method方法即函数描述对象的行为、功能和业务逻辑。方法的结构返回值类型 方法名(传参类型 参数名) { // 方法体 }返回值类型无返回值void基本类型int、char、boolean等引用类型String、自定义类、数组传参类型有参数方法接收外部数据无参数方法不接收外部数据方法体内容定义变量、赋值判断、循环调用其他方法嵌套打印、计算逻辑返回值非空类型return xxx3. 构造方法Constructor创建对象时用于初始化对象属性一个类可以有多个构造方法方法重载Java 会提供默认的无参构造方法构造方法的规则要素要求返回类型不写写void也不行方法名必须与类名一致传参类型根据需要初始化哪些属性方法体给对象赋值this.name xxx构造方法可以做的事给对象属性赋值this.name xxx调用本类/父类的其他构造方法注意只做初始化不写业务逻辑4. 内部类Inner Class在类里面嵌套另一个类成员内部类在类里面方法外面静态内部类使用static修饰的内部类三、代码示例示例 1基础类定义publicclassDog{Stringbreed;// 品种intsize;// 大小Stringcolour;// 颜色intage;// 年龄voideat(){}voidrun(){}voidsleep(){}voidname(){}}示例 2构造方法与普通方法publicclassStudent{// 成员变量 privateStringname;privateintage;// 1. 构造方法 // 无参构造手动编写覆盖默认构造publicStudent(){System.out.println(无参构造执行初始化对象);}// 有参构造方法重载publicStudent(Stringname,intage){this.namename;// 初始化属性this.ageage;System.out.println(有参构造执行初始化姓名和年龄);}// 2. 普通方法 // 无返回值普通方法publicvoidstudy(){System.out.println(name 正在学习);}// 有返回值普通方法publicintgetAge(){returnage;}// 测试 publicstaticvoidmain(String[]args){// 1. 创建对象 → 自动调用构造方法不能手动调 student.Student()StudentstudentnewStudent(小明,18);// 2. 手动调用普通方法student.study();intagestudent.getAge();System.out.println(年龄age);}}运行结果有参构造执行初始化姓名和年龄 小明 正在学习 年龄18四、对象的创建与使用1. 创建对象使用new关键字创建对象包含三个步骤步骤说明示例声明声明对象名称和类型Dog myDog;实例化使用new创建对象new Dog();初始化调用构造方法初始化自动执行构造方法完整示例// 声明 实例化 初始化PuppymyPuppynewPuppy(Tommy);2. 访问成员变量和方法通过已创建的对象来访问/* 实例化对象 */ObjectreferenceVariablenewConstructor();/* 访问类中的变量 */referenceVariable.variableName;/* 访问类中的方法 */referenceVariable.methodName();3. 完整示例publicclassPuppy{privateintage;privateStringname;// 构造器publicPuppy(Stringname){this.namename;System.out.println(小狗的名字是 : name);}// 设置 age 的值publicvoidsetAge(intage){this.ageage;}// 获取 age 的值publicintgetAge(){returnage;}// 获取 name 的值publicStringgetName(){returnname;}// 主方法publicstaticvoidmain(String[]args){// 创建对象PuppymyPuppynewPuppy(Tommy);// 通过方法来设定 agemyPuppy.setAge(2);// 调用另一个方法获取 ageintagemyPuppy.getAge();System.out.println(小狗的年龄为 : age);// 也可以直接访问成员变量通过 getter 方法System.out.println(变量值 : myPuppy.getAge());}}五、源文件与包1. 源文件声明规则当一个源文件中定义多个类还包含import语句和package语句时规则说明public 类限制一个源文件中只能有一个public类非 public 类一个源文件可以有多个非 public 类文件名源文件的名称必须和public类名一致package 语句如果类在某个包中package语句应在源文件首行import 语句应放在package语句和类定义之间没有package时放在最前面作用范围import和package语句对源文件中所有类都生效2. Java 包Package包的本质是文件夹主要对类和接口进行分类管理一个项目中可能包含成百上千个类3. import 语句用于引入外部包的类或接口六、完整实战示例在该例子中我们创建两个类Employee和EmployeeTest。Employee.javaimportjava.io.*;publicclassEmployee{privateStringname;privateintage;privateStringdesignation;privatedoublesalary;// Employee 类的构造器publicEmployee(Stringname){this.namename;}// 设置 age 的值publicvoidsetAge(intage){this.ageage;}// 获取 age 的值publicintgetAge(){returnage;}// 设置 designation 的值publicvoidsetDesignation(Stringdesignation){this.designationdesignation;}// 获取 designation 的值publicStringgetDesignation(){returndesignation;}// 设置 salary 的值publicvoidsetSalary(doublesalary){this.salarysalary;}// 获取 salary 的值publicdoublegetSalary(){returnsalary;}// 打印信息publicvoidprintEmployee(){System.out.println(this);}// 重写 toString 方法OverridepublicStringtoString(){return名字: name\n年龄: age\n职位: designation\n薪水: salary;}}EmployeeTest.javaimportjava.io.*;publicclassEmployeeTest{publicstaticvoidmain(String[]args){// 使用构造器创建两个对象EmployeeempOnenewEmployee(RUNOOB1);EmployeeempTwonewEmployee(RUNOOB2);// 调用这两个对象的成员方法empOne.setAge(26);empOne.setDesignation(高级程序员);empOne.setSalary(1000);empOne.printEmployee();empTwo.setAge(21);empTwo.setDesignation(菜鸟程序员);empTwo.setSalary(500);empTwo.printEmployee();}}