当前位置: 首页 > news >正文

类和对象随笔(注:后要精简笔记)

类和对象

主要内容

  • 关系
  • 类图
  • 定义和调用方法
  • this关键字
  • 定义和调用构造方法

课程目标

  • 掌握类与对象关系
  • 熟悉类图使用
  • 掌握方法定义及使用
  • 掌握成员变量和局部变量的区别
  • 掌握构造方法的定义及调用

第一节 类和对象

1.类的由来

人们在日常生活中经常会将具有相同特征或者相同行为的事物归为一类

,在Java中,用来描述这类事物的就是Java类,Java类就是这样诞生的,Java

是一门以类为组织单元的语言,我们定义的Java类就是一种Java数据类型,该数据类型属于引用数据类型.

2.如何定义类

语法

public class 类名{}

示例

//人类
public class Person{}

类定义好了,如何填充类中的内容?

找出人类特征:姓名,性别,年龄

public class Person {public String name;//姓名public String sex;//性别public int age;//年龄}

在Java中,使用方法来描述行为

//[]中内容表示可有可无
访问修饰符  返回值类型  方法名([参数列表]){[return 返回值;]}
public class Person {public String name; //姓名public String sex; //性别public int age; //年龄public void eat(){System.out.println("人吃饭");}public void sleep(){System.out.println("人睡觉");}public void work(){System.out.println("人工作");}}

定义一个计算机类,进行加减乘除

  1. 够接收两个数字和一个运算符
  2. 运算
public class Calculator {public double number1; //接收的数字1public double number2; //接收的数字2public String operator; //接收的运算符public void calculate(){//计算switch (operator){case "+":System.out.println(number1 + number2);break;case "-":System.out.println(number1 - number2);break;case "*":System.out.println(number1 * number2);break;case "/":System.out.println(number1 / number2);break;}

3.类图

用于描述类的结构,与流程图一样

public修饰的属性和方法前需要使用'+',private修饰的属性和方法前需要使用'-'

Person
+name:String +sex:String +age:int
+eat(): void +sleep(): void +work(): void

可用processon网站进行绘制

4.类和对象的关系

说明

类是描述多个事物共有特征和行为的一个抽象体。而对象是一个具体的事物,每一个属性和每一个行 为都是具体的。

类是对象的集合体。类是用来构建具体的对象的。

语法

类名 对象名 = new 类名();
对象名.属性名 = 属性值;

示例

 public class PersonTest {public static void main(String[] args) {//这里p称为对象名,跟数组名一样,本质都是变量。只是在面向对象中称之为对象名Person p = new Person();//构建了一个具体的人,只是这个人目前还没有名字,性别
和年龄p.name = "刘德华";p.sex = "男";p.age = 53;}}public class CalculatorTest {public static void main(String[] args) {Calculator c = new Calculator(); //构建了一个具体的计算器c.number1 = 10;c.number2 = 5;c.operator = "*";}}

也可创建多个对象

类是对多个事物的抽象描述,描述的是他们的共同特征和行为举止。

**类中描述的共同特征,在对象创建出来之后是跟随对象走的。行为举止也是一样,属于对象。 **

第二节 成员变量和成员方法

1. 成员变量

**解释说明 **

在类中定义的变量就是成员变量。成员变量顾名思义是属于成员(具体的对象、具体的事物)的,成员变量有初始值。

成员变量的初始值

引用数据类型的初始值都是 null ,整数都是0,浮点数都是0.0,boolean类型是false,char类型是 '\u0000

**访问成员变量的语法 **

对象名.属性名;

2. 成员方法

解释说明

在类中定义的方法就是成员方法。成员方法顾名思义是属于成员(具体的对象、具体的事物)的。

调用成员方法的语法

//[]中内容可有可无
对象名.方法名([参数列表]);
 /*** 人类
*/
public class Person {
public String name; //姓名
public String sex; //性别
public int age; //年龄
}public class PersonTest {public void eat(){System.out.println(age + "岁的" + sex + "性同志" +name + "在吃饭");}public void sleep(){System.out.println(age + "岁的" + sex + "性同志" +name + "在睡觉");}public void work(){System.out.println(age + "岁的" + sex + "性同志" +name + "在工作");}public class PersonTest {     public static void main(String[] args) {//这里p称为对象名,跟数组名一样,本质都是变量。只是在面向对象中称之为对象名
Person p = new Person();//构建了一个具体的人,只是这个人目前还没有名字,性别
和年龄
System.out.println(p.name + "\t" + p.sex + "\t" + p.age);p.name = "刘德华";p.sex = "男";p.age = 53;System.out.println(p.name + "\t" + p.sex + "\t" + p.age);p.eat();p.sleep();p.work();Person p1 = new Person();p1.name = "张学友";p1.sex = "男";p1.age = 52;System.out.println(p1.name + "\t" + p1.sex + "\t" + p1.age);p1.eat();p1.sleep();p1.work();Person p2 = new Person();p2.name = "黎明";p2.sex = "男";p2.age = 45;System.out.println(p2.name + "\t" + p2.sex + "\t" + p2.age);p2.eat();p2.sleep();p2.work();}}

3.成员变量和局部变量

解释说明

局部变量就是在方法内部定义的变量。局部变量没有初始值,因此,局部变量在使用之前必须完成初始化操作。当局部变量与成员变量同名时,局部变量的优先级更高.

示例

public void show(){//展示
String name;//局部变量,没有初始值
System.out.println(name + brand + "\t" + type + "\t" + price);}public void show(){//展示
//因此局部变量的作用范围更小,就在局部变量所定义的方法内,
//因此局部变量在方法内的优先级要高于成员变量
String brand = "奔驰";System.out.println(brand + "\t" + type + "\t" + price);}

4. this 关键字

思考

在方法中,如果局部变量和成员变量同名,此时又想使用成员变量,怎么办呢?

此时需要使用this关键字来解决。

this关键字表示的是当前对象(使用new创建出来的对象)

示例

public class Car {public String brand; //品牌public String type; //型号public double price; //价格public void start(){System.out.println("汽车启动");}public void speedUp(){System.out.println("汽车加速");}public void stop(){System.out.println("汽车刹车");}public void show(){//展示//因此局部变量的作用范围更小,就在局部变量所定义的方法内,//因此局部变量在方法内的优先级要高于成员变量String brand = "奔驰";System.out.println(this.brand + "\t" + type + "\t" + price);}}public class CarTest {public static void main(String[] args) {Car c = new Car(); // this => cc.brand = "奥迪";c.type = "A8";c.price = 100000;c.show();Car c1 = new Car(); // this => c1c1.brand = "大众";c1.type = "保时捷卡宴";c1.price = 150000;c1.show();}}

this还可以用来调用成员的方法

/*** 人类*/public class Person {public String name; //姓名public String sex; //性别public int age; //年龄public void eat(){System.out.println(age + "岁的" + sex + "性同志" +name + "在吃饭");work(); //相当于 this.work();}public void sleep(){System.out.println(age + "岁的" + sex + "性同志" +name + "在睡觉");work(); //相当于 this.work();}public void work(){System.out.println(age + "岁的" + sex + "性同志" +name + "在工作");}}

第三节 构造方法

1. 概念

构造方法是一种特殊的方法,

主要用于创建对象以及完成对象的属性初始化操作。

构造方法不能被对象调用。

2. 语法

//[]中内容可有可无
访问修饰符 类名([参数列表]){}
public class Car {public String brand; //品牌public String type; //型号public double price; //价格public Car(){this.brand = "默认品牌";this.type = "默认型号";this.price = 5000;}

思考:在Car类中没有定义构造方法的时候,我们也可以这么使用,为什么?

官方说明

You don't have to provide any constructors for your class, but you must be careful when doing this. The compiler automatically provides a no-argument, default constructor for any class without constructors.

你不必为类提供任何构造方法,但是在执行此操作时必须要小心。 编译器会自动为任何没有构造方法的 类提供无参数的默认构造方法。

http://www.jsqmd.com/news/116640/

相关文章:

  • CFD/DDPM接口Fluent和EDEM耦合案例:传热颗粒水流动
  • 《21天学通C语言(第7版)》内容整理
  • 如何用Linly-Talker批量生成产品介绍视频?自动化脚本示例
  • 系统测试:确保产品的整体性
  • 西门子S7-1200总线控制V90伺服程序模板及全套EPLAN电气图纸(含两种控制模式及多类程序)
  • Linly-Talker在法院庭审记录回放中的当事人代理演示
  • Linly-Talker情感计算能力评测:能否识别用户情绪并回应?
  • Linly-Talker在核电站安全规程检查中的语音交互审计
  • 【效率提升】Lombok插件:用几个注解帮你告别JavaBean冗长的getter/setter
  • Linly-Talker能否实现语音驱动全身动作?全身动画扩展计划
  • 速度误差与姿态误差的关系
  • 52、使用System Center和OMS管理服务器
  • 【避坑指南】Maven依赖冲突怎么解决?用mvn dependency:tree一眼看清
  • 251221
  • Linly-Talker如何增强背景音乐下的语音清晰度?
  • Linly-Talker表情驱动揭秘:情感化数字人的关键技术突破
  • 索尼腾讯握手言和:侵权官司收场,合作再升级!
  • 基于主从博弈的社区综合能源系统分布式协同优化运行策略基本复现 编程平台:Matlab-yalm...
  • Linly-Talker能否输出ProRes编码母版?专业后期流程支持
  • 从代码到价值:验收测试如何架起技术交付与用户需求的桥梁
  • 从Halcon官方例子出发:双目相机标定与三维点云生成
  • 32、深入探索 Windows Server 2008 中的文件服务管理与 FSRM 应用
  • SpringBoot+Vue +线上教育培训办公系统管理平台源码【适合毕设/课设/学习】Java+MySQL
  • 功能测试用例深度解析:从设计到优化的全流程实践
  • “想买Labubu?门店排队成‘博物馆’,消费者只能靠线上抢”!
  • Linly-Talker在婚庆定制视频中的新人形象合成服务
  • 最近在折腾四旋翼导航时踩了不少坑,发现真正让无人机听话飞行的核心都在代码细节里。今天就拿手头正在调试的飞控项目举例,聊聊怎么用代码让四旋翼实现基础导航
  • 33、Windows Server 2008 文件服务与打印服务配置全解析
  • SpringBoot+Vue 宠物爱心组织管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • Linly-Talker生成视频的逐帧调试工具使用指南