目录
什么是对象?
-
从java思想上看: "万物皆对象"
-
对象: 操作单位
-
-
从程序上看: 是一个存储空间, 内部可以存储一个对象的所有内容
对象的组成
-
特征: 都有什么
-
行为: 会做什么
对象间的关系
-
is a: 一个对象继承自另一个对象
-
动物是一个对象 狗是一个对象
-
狗 是一个 动物 Dog is a Animal
-
狗继承自动物
-
-
use a: 一个对象使用另一个对象
-
电脑是一个对象 程序员是一个对象
-
程序员使用电脑
-
-
has a: 一个对象包含另一个对象(一个对象是另一个对象的组成部分)
-
键盘是对象 显示器是一个对象 电脑是一个对象
-
键盘和显示器是电脑的组成部分
-
电脑包含键盘和显示器
-
重新认识类
作用为盛放对同一批对象特征和行为的描述
普通类(容器): 盛放代码和主函数,可以使内部代码执行 com.xxx.test
描述型的类(容器+模板): 存放对对象的描述 com.xxx.entity
类和对象的关系
-
类是对象的模板
-
对象是类的实例
-
一个模板可以创建出多个相同或相似的实例
类的组成
-
属性: 用来描述对象特征, 也成为全局变量|成员变量等
-
语法:
第一种: 只声明 (常用) 数据类型 属性名; 第二种: 声明的同时赋初始值 数据类型 属性名=值;
-
位置: 类以内,其他内容以外. 通常写在类的最上方
package com.by.entity; /** * 用来描述学生对象 */ public class Student { String name;//姓名 int age;//年龄 double score;//成绩 // String className = "206班"; }
-
特点: 具有默认值
-
与局部变量的区别:
局部变量 属性 位置 方法内 方法外 作用范围 从定义行到直属代码块结束 至少整个类 命名冲突 同一作用范围内不可重名 可以和局部变量重名,局部变量优先级更高 默认值 没有 有
-
-
方法: 用来描述对象行为. 也成为成员方法|实例方法等
-
语法:
访问修饰符 返回值类型 方法名(形参列表){ //操作语句 //return语句 }
函数就是加了static的方法
普通方法对于参数和返回值的使用与函数完全一致
-
位置: 类以内, 其他内容以外. 通常写在属性下方
package com.by.entity; /** * 用来描述学生对象 */ public class Student { String name;//姓名 int age;//年龄 double score;//成绩 //学习方法 public void study(){ System.out.println("学生在学习..."); } }
-
创建对象
类名 对象名=new 类名();
对象的使用
-
访问属性
取值: 对象名.属性名 赋值: 对象名.属性名=值;
属性的完整语法:
访问修饰符 数据类型 属性名;
当访问修饰符省略时,表示该属性访问修饰符为default
访问修饰符 范围 public 公共的,任意位置都可访问 default 默认的, 只有本类和同包可以访问 -
访问方法
对象名.方法名(实参列表)
package com.by.test; import com.by.entity.Student; /** * 测试类 */ public class Test { public static void main(String[] args) { // 创建一个学生对象 Student stu1=new Student(); //赋值 stu1.name="张三"; stu1.age = 20; stu1.score = 90.0; //取值 System.out.println(stu1.name); System.out.println(stu1.age); System.out.println(stu1.score); //调用学习方法 stu1.study(); //System.out.println(stu1); Student stu2 = new Student(); System.out.println(stu2.name); System.out.println(stu2.age); System.out.println(stu2.score); } }
构造方法
-
位置: 类以内,其他内容以外. 通常写在属性下方
语法
-
无参构造
访问修饰符 类名(){ }
-
有参构造
访问修饰符 类名(数据类型 参数名1,数据类型 参数名2,..){ 属性名1=参数名1; 属性名2=参数名2; .. }
//无参构造 public Student(){ } //有参构造 public Student(String n,int a,double s){ //用参数给属性赋值 name = n; age = a; score = s; }
语法特点
-
方法名必须与类名一致
-
没有返回值类型部分
使用特点
-
作用为创建对象, 创建对象必须使用构造
-
类名 对象名=new 类名();
-
第一个类名: 声明要创建哪个类的对象
-
第二个类名: 构造方法名, 调用构造方法实现创建对象
-
-
只能通过new关键字调用
new 类名(实参);
-
利用有参构造创建对象:
类名 对象名=new 类名(值1,值2,..);
-
无参构造和有参构造的区别
-
无参构造: 只能创建对象, 属性保留默认值
-
有参构造: 可以在创建对象的同时直接给属性赋予初始值
-
-
无参构造至多存在1个,有参构造可以存在多个
-
-
类中默认存在一个无参构造, 当显式定义构造之后,该无参构造将会失效
方法重载
实际开发中,为了降低功能相同或相似方法的开发难度, 允许方法重载, 目的为提高程序员的开发效率
规则
在同一类中,方法名相同,参数列表不同
与访问修饰符、返回值类型、参数名、异常没有关系
使用
从上至下的匹配参数列表,匹配成功之后执行
方法重载无法提高程序的执行效率
对象的创建过程
-
又名属性的三个赋值时期
-
给属性开辟空间,赋默认值
-
给属性赋声明属性时的初始值
-
执行构造时给属性赋值
只有默认值是必须执行的
先构建属性,再执行构造
this关键字
-
代表当前对象
this.
this.属性名 :指明调用本类属性
-
更新之后的标准有参构造语法:
访问修饰符 类名(数据类型 属性名1,数据类型 属性名2,..){ this.属性名1=属性名1; this.属性名2=属性名2; .. }
public class Student { public String name; public int age; public double score; //无参构造 public Student(){ } //有参构造 public Student(String name,int age,double score){ //属性=形参; this.name = name; this.age = age; this.score = score; } }
this.方法名(实参列表) :指明调用本类的方法
this()
-
调用本类其他构造内容
this(实参列表)
使用
-
根据实参列表决定调用的是哪个构造的内容
-
位置: 必须写在构造方法有效代码第一行
-
不可循环调用或自己调用自己