目录

面向对象

一、类和对象

1.定义

2.关系

3.类的组成

4.创建对象的格式

5.使用对象成员变量的格式

6.使用对象成员方法的格式

二、对象内存图

1.单个对象内存图

2.两个对象内存图(方法共用内存图)

3.两个引用指向相同内存图

三、成员变量和局部变量

四、this变量

1.介绍

2.作用

五、构造方法

1.概述

2.格式

3.执行时机

4.作用

5.注意事项

6.执行流程

六、封装 --- 合理隐藏,合理暴露

1.介绍

2.好处

3.权限修饰符

4.案例

七、标准JavaBean

1.介绍

2.要求

3.案例

八、面向对象综合案例


面向对象

三大特征:封装、继承、多态

一、类和对象

1.定义

Java中想要创建对象,必须先要有类的存在

类:指的是一组相关属性和行为的集合,我们将其理解为是一张对象的设计图

对象:是根据设计图(类)创建出来的实体

2.关系

  • 依赖关系:Java中需要根据类,创建对象

  • 数量关系:一个类,可以创建出多个对象

3.类的组成

属性:在代码中使用成员变量表示,跟之前定义变量的格式一样,只不过位置需要放在方法的外面

行为:在代码中使用成员方法表示,跟之前定义方法的格式一样,只不过需要去掉static关键字

4.创建对象的格式

*类名 对象名 = new 类名();

5.使用对象成员变量的格式

对象名.成员变量;

6.使用对象成员方法的格式

对象名.成员方法();

package Test;
​
public class Student {
​String name = "小严";int age = 18;
​public void study(){System.out.println("学生学习...");}
​public void eat(){System.out.println("学生吃饭...");}
}

有主方法的类叫测试类

package Test;
​
public class StudentTest {public static void main(String[] args) {Student stu1 = new Student();
​System.out.println(stu1.name);System.out.println(stu1.age);
​stu1.study();stu1.eat();}
}

练习

package Test;
​
public class Song {
​String song;String name;int date;
​public void show(){System.out.println("歌曲名字:" + song + "\n歌手:" + name +"\n发布时间:" + date);}
}

测试类

package Test;
​
public class SongTest {public static void main(String[] args) {
​Song y1 = new Song();y1.song = "《For You》";y1.name = "严浩翔";y1.date = 20200515;
​Song y2 = new Song();y2.song = "《尾号6208》";y2.name = "严浩翔";y2.date = 20210816;
​Song y3 = new Song();y3.song = "《Y》";y3.name = "严浩翔";y3.date = 20211214;
​y1.show();y2.show();y3.show();}
}

运行结果

二、对象内存图

1.单个对象内存图

2.两个对象内存图(方法共用内存图)

3.两个引用指向相同内存图

三、成员变量和局部变量

区别 成员变量 局部变量
类中位置不同 方法外 方法中
初始化值不同 有默认初始化值 没有,使用之前需要完成赋值
内存位置不同 堆内存 栈内存
生命周期不同 随着对象的创建而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的运行结束而消失
作用域 在自己所归属的大括号中 在自己所归属的大括号中

四、this变量

1.介绍

当局部变量和成员变量出现了重名的情况,Java使用的是就近原则

this 代表当前类对象的引用(地址)---> 谁调用就创建谁 ---> 哪一个对象调用方法,那么方法中的this代表的就是哪个对象

如:stu1.print() ---> stu1调用print方法,this代表stu1的地址

例如:

package Test;
​
public class Student {String name;int age;public void sayHello(String name) {System.out.println(name);}
}
package Test;
​
public class StudentTest {public static void main(String[] args) {Student stu = new Student();stu.name = "钢门吹雪";stu.age = 23;stu.sayHello("西域狂鸭");}
}

运行结果为:西域狂鸭

解决办法:this关键字区分

package Test;
​
public class Student {String name;int age;public void sayHello(String name) {System.out.println(this.name);}
}
package Test;
​
public class StudentTest {public static void main(String[] args) {Student stu = new Student();stu.name = "钢门吹雪";stu.age = 23;stu.sayHello("西域狂鸭");}
}

运行结果为:钢门吹雪

2.作用

调用本类成员

  • this.本类成员变量;:如果不涉及变量重复, this.可以省略

  • this.本类成员方法();:没有前提条件this.可以直接省略

五、构造方法

1.概述

构造器:初始化一个新建的对象,构建、创造对象的时候所调用的方法

2.格式

  • 方法名与类名相同,大小写也要一致

  • 没有返回值类型,连void都没有

  • 没有具体的返回值(不能由return带回结果数据)

3.执行时机

  • 创建对象的时候调用,每创建一次对象,就会执行一次构造方法

  • 不能手动调用构造方法

package construction;
​
public class Student {
​//构造方法public Student(){System.out.println("我是Student类的构造方法");}
}
package construction;
​
public class StudentTest {public static void main(String[] args) {
​//调用构造方法Student stu1 = new Student();Student stu2 = new Student();Student stu3 = new Student();}
}

4.作用

本质作用:创建对象

结合构造方法执行时机:给对象中的属性(成员变量)进行初始化

package construction;
​
public class Student {
​//成员变量String name;int age;
​//构造方法 给对象中的变量初始化//局部变量public Student(String name, int age){this.name = name;this.age = age;}
}
package construction;
​
public class StudentTest {public static void main(String[] args) {
​//调用构造方法Student stu1 = new Student("小严",18);System.out.println(stu1.name + "---" + stu1.age);
​Student stu2 = new Student("小熊",16);System.out.println(stu2.name + "---" + stu2.age);}
}

运行结果

5.注意事项

①构造方法的创建

  • 如果没有定义构造方法,系统将给出一个默认的无参数构造方法

  • 如果定义了构造方法,系统将不再提供默认的构造方法(建议:编写类的时候,不管是无参构造还是带参构造,全部手动给出)

②构造方法的重载

  • 构造方法也是方法,允许重载关系出现(同一个类中,方法名相同,参数不同)

③构造方法不允许手动调用(对象名.方法名),只能在new对象时执行

6.执行流程

六、封装 --- 合理隐藏,合理暴露

1.介绍

使用类设计对象时,将需要处理的数据,以及处理这些数据的方法,设计到对象中

2.好处

  • 更好地维护数据

  • 使用者无需关心内部实现,只要知道如何使用即可8

3.权限修饰符

修饰符 类本身 同一个包的类 不同包的子类 任何类
private
default(默认)
protected
public
  • 私有成员变量(为了保证数据的安全性)

  • 针对私有的成员变量,提供对应的setXxx和getXxx方法(set设置 get获取)

4.案例

package encapsulation;
​
public class Student {//使用者可能给出错误数据,所以要隐藏private int age;
​//setAge和getAge方法让用户达到目的public void setAge(int age){
​//数据安全校验if(age >= 1 && age <= 120){this.age = age;}else{System.out.println("年龄有误,请检查是否是1~120之间");}
​}
​public int getAge(){//访问成员变量的age 变量名不重复,"this."省略了return age;
​}
}
package encapsulation;
​
public class StudentTest {public static void main(String[] args) {Student stu = new Student();stu.setAge(18);
​int age = stu.getAge();System.out.println(age);}
}

输入错误数据的运行结果

输入正确数据的运行结果

七、标准JavaBean

1.介绍

即实体类:封装数据的类

实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离

2.要求

  • 这个类中的成员变量都要私有,并且要对外提供相应的getXxx和setXxx方法

  • 类中提供无参、带参构造方法

3.案例

package domain;
​
public class Student {//1.成员变量私有化private String name;private int age;
​//2.空参、带参方法
​public Student() {}
​public Student(String name, int age) {this.name = name;this.age = age;}
​//3.对私有的成员变量,对外提供相应的getXxx和setXxx方法
​public String getName() {return name;}
​public void setName(String name) {this.name = name;}
​public int getAge() {return age;}
​public void setAge(int age) {this.age = age;}
}

①生成空参、带参方法的快捷键:

  • 右键-Generate-Constructor-Select None

  • 右键-Generate-Constructor-Ctrl+A(全选)-OK

②生成getXxx和setXxx方法的快捷键

  • 右键-Generate-Getter and Setter-Ctrl+A(全选)-OK

③一键生成(只需要对成员变量私有化)

  • 右键-Ptg To JavaBean

八、面向对象综合案例

需求:

  • 展示系统中的全部电影(每部电影展示:名称、评分)

  • 允许用户根据电影编号(id)查询出某个电影的详细信息 <u></u>

“Ctrl+Alt+T”可以将代码用循环包住

Movie.java ---> 封装数据

package domain;
​
//负责对数据做封装,不负责处理业务
public class Movie {
​private int id;private String title;private String time;private double score;private String area;private String type;private String director;private String starring;
​
​public Movie() {}
​public Movie(int id, String title, String time, double score, String area, String type, String director, String starring) {this.id = id;this.title = title;this.time = time;this.score = score;this.area = area;this.type = type;this.director = director;this.starring = starring;}
​/*** 获取* @return id*/public int getId() {return id;}
​/*** 设置* @param id*/public void setId(int id) {this.id = id;}
​/*** 获取* @return title*/public String getTitle() {return title;}
​/*** 设置* @param title*/public void setTitle(String title) {this.title = title;}
​/*** 获取* @return time*/public String getTime() {return time;}
​/*** 设置* @param time*/public void setTime(String time) {this.time = time;}
​/*** 获取* @return score*/public double getScore() {return score;}
​/*** 设置* @param score*/public void setScore(double score) {this.score = score;}
​/*** 获取* @return area*/public String getArea() {return area;}
​/*** 设置* @param area*/public void setArea(String area) {this.area = area;}
​/*** 获取* @return type*/public String getType() {return type;}
​/*** 设置* @param type*/public void setType(String type) {this.type = type;}
​/*** 获取* @return director*/public String getDirector() {return director;}
​/*** 设置* @param director*/public void setDirector(String director) {this.director = director;}
​/*** 获取* @return starring*/public String getStarring() {return starring;}
​/*** 设置* @param starring*/public void setStarring(String starring) {this.starring = starring;}
}

MovieService.java ---> 负责管理业务

package test2;
​
import domain.Movie;
​
import java.util.Scanner;
​
//负责管理业务
public class MovieService {
​//定义成员变量  隐藏private Movie[] movies;
​private Scanner sc = new Scanner(System.in);
​//构造方法public MovieService(Movie[] movies) {
​//将局部变量传给成员变量this.movies = movies;}
​/*** 启动电影信息管理系统*/public void start() {
​
​lo:while (true) {System.out.println("----------电影信息系统----------");System.out.println("请输入您的选择:");System.out.println("1. 查询全部电影信息");System.out.println("2. 根据id查询电影信息");System.out.println("3. 退出");
​int choice = sc.nextInt();
​switch(choice){case 1:queryMovieInfos();break;case 2:queryMovieInfoById();break;case 3:System.out.println("感谢您的使用,再见!");break lo;default:System.out.println("您的输入有误,请检查");break;}}}
​/*** 此方法允许用户根据电影编号(id)查询出某个电影的详细信息*/private void queryMovieInfoById() {//1.键盘录入用户输入的编号System.out.println("请输入您要查询的电影编号");int id = sc.nextInt();//2.遍历数组,从数组中查询电影信息for (int i = 0; i < movies.length; i++) {Movie movie = movies[i];if(movie.getId() ==id){//3.将找到的电影信息,打印在控制台System.out.println(movie.getId() + "---" + movie.getTitle() +"---" + movie.getTime() + "---" +movie.getScore() + "---" + movie.getArea()+ "---" + movie.getType() + "---" + movie.getDirector() + "---" + movie.getStarring());return;}}//代码要是走到这里,说明没找到System.out.println("您输入的编号不存在,请检查!");
​}
​
​/***展示系统中的全部电影(每部电影展示:名称、评分)*/private void queryMovieInfos() {//1.遍历数组,取出每一个电影对象for (int i = 0; i < movies.length; i++) {Movie movie = movies[i];//System.out.println(movie);打印对象名,看到的是内存地址//2.通过电影对象,调用内部getXxx方法,获取信息并打印System.out.println(movie.getTitle() + "---" + movie.getScore());}}
}

Test.java ---> 测试类

package test2;
​
import domain.Movie;
​
//测试类
public class Test {public static void main(String[] args) {
​Movie movie1 = new Movie(1, "东八区的先生们", "2022", 2.1, "中国大陆", "剧情 喜剧",  "夏睿", "张翰 王晓晨");Movie movie2 = new Movie(2, "上海堡垒", "2019", 2.9, "中国大陆", "爱情 战争 科幻",  "滕华涛", "鹿晗 舒淇");Movie movie3 = new Movie(3, "纯洁心灵·逐梦演艺圈", "2015", 2.2, "中国大陆", "剧情 喜剧",  "毕志飞", "朱一文 李彦漫");
​//数组存的是对象的地址值Movie[] movies = {movie1,movie2,movie3};
​//该如何将一个类中的数据,传递给另一个类?//1.将数组作为参数传到类MovieService中//2.选中类中的 movies  Alt+回车:创建构造方法MovieService movieService = new MovieService(movies);movieService.start();}
}

面向对象-类和对象、构造方法、封装相关推荐

  1. javaSE各阶段练习题---面向对象-类与对象、封装、构造方法(1

    1-8题抽查提问,能够使用给自己的语言表述 1.什么是面向对象?1.是一种编程思想JAVA语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想.我们在面向对象思想的指引下, 使用java ...

  2. 杨校老师课堂之Java类与对象、封装、构造方法

    杨校老师课堂之Java类与对象.封装.构造方法 本篇文章内容如下: 面向对象 类与对象 三大特征--封装 构造方法 教学目标 能够理解面向对象的思想 能够明确类与对象关系 能够掌握类的定义格式 能够掌 ...

  3. 如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)

    二 Java面向对象 类和对象 1.1 什么是面向过程?什么又是面向对象? 面向过程--步骤化 面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可 面向对象 ...

  4. java 类与对象、封装、构造方法

    java 类与对象.封装.构造方法 面向对象 类与对象 三大特征--封装 构造方法 第1章 面向对象思想 1.1 面向对象思想概述 概述 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种 ...

  5. Python快速入门(八)面向对象1:类、对象和封装

    Python快速入门(八)面向对象1:类.对象和封装 1.类和对象 1)类的定义 2)对象的定义 3)类和对象的关系 4)类的设计 2.第一个面向对象案列 代码1 代码2 3.设置对象属性 4.ini ...

  6. java面向对象-类和对象

    Java面向对象笔记 文章目录 Java面向对象笔记 java面向对象 类和对象 什么是类 定义 创建和使用 公式 构造方法 什么是构造方 怎么定义和使用构造方法 实列 This关键字 什么是成员变量 ...

  7. 笔记整理2----Java语言基础(二)06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础

    06 断点调试与数据加密+07 面向对象-类与对象+08 java常用API-基础+09 java集合+10 IO流-基础 第06天 java基础语法 今日内容介绍  Eclipse断点调试  基 ...

  8. C++类和对象的封装

    C++类和对象的封装 C++面向对象的三大特性 例如 封装 封装的意义 示例1 示例代码 示例2 示例2代码 C++面向对象的三大特性 封装.继承.多态 C++认为万事万物都皆为对象,对象上有其属性和 ...

  9. C++类与对象之封装篇

    C++类与对象之封装篇 一 . 封装的意义 封装的意义一 封装的意义二 二 . struct和class的区别(访问权限) 三 . 成员属性一般设置为私有(权限) 一 . 封装的意义 封装是C++面向 ...

  10. php面向对象——类和对象

    php面向对象--类和对象 1.类和对象 <?php //定义一个类: class A{public $name="John"; //定义一个普通属性static $age= ...

最新文章

  1. javascript选择器_如何通过选择正确JavaScript选择器来避免沮丧
  2. SQL基础操作_8_基础概念
  3. JVM OQL查询语言
  4. Shell 变量--shell教程
  5. java.equal例子_Java中的== 和equals()方法详解与实例
  6. 设置在最小数目的阵列
  7. Android tv开发px,【Android】TV端项目开发挖坑总结
  8. c++字符数组整数转换中文大写金额的形式_数字大写转换烦,内置格式多缺陷, VBA函数来解难...
  9. 中国酒柜行业市场供需与战略研究报告
  10. Oracle变量的定义、赋值及使用
  11. 【java笔记】Collection集合
  12. sql统计表中各类型金额_产品经理市场需求旺盛的10大基础技能——第1篇读透SQL...
  13. JPress v2.0-rc.6 发布,新增 Java 插件的在线升级功能
  14. 数学模型的相关概念及意义等理论内容
  15. 机器学习之旅:支持向量机通俗导论(理解SVM的三层境界)
  16. haswell主板linux驱动下载,Intel首版Haswell核芯显卡驱动下载
  17. 恶意抢注商标的认定标准是什么?商标被抢注怎么解决?
  18. c语言程序小时工资计算,C语言入门之工资计算
  19. 两个苹果手机怎么定位_苹果手机录屏怎么开
  20. Spring Boot基于KLock实现分布式锁的使用详解(一)

热门文章

  1. 微信远程代码执行漏洞(最新版本利用)-亲测已上线
  2. 【Spring】@Conditional详解
  3. 剑三服务器全部在维护,剑三服务器开服监控
  4. 设备5S管理点检图文标准及注意事项
  5. oracle数据库常见故障及灾难情况分析
  6. 七款编辑器/笔记工具推荐
  7. 在键盘上输入数n,编程计算sum=1-1/2!+1/3!-1/4!+…(-1)n-1*1/n!
  8. python 实现多线程下载视频
  9. 虚拟机安装Linux问题小结
  10. QQ怎么 发送 已经录好的视频