目录
理解面向对象
面向对象编程有什么好处
凡事找对象的编程套路,更符号人类的思维习惯,编程也会更直观
程序中的面向对象是什么
对象本质上是一种特殊的数据结构
class也就是类,也称为对象的设计图(或者对象的模板)
面向对象(Object-Oriented Programming,OOP)是一种编程范式,它将程序中的数据和操作数据的方法组织成“对象”,通过这些对象之间的交互来完成程序的功能。在 Java 中,面向对象的核心思想是将现实世界中的事物抽象为类和对象,类是对象的模板或蓝图,定义了对象的属性(变量)和行为(方法),而对象是类的实例。通过面向对象编程,可以提高代码的可维护性、可复用性和可扩展性,使程序更贴近现实世界的逻辑。
对象在计算机中的执行原理
1、使用new关键字在堆内存中分配内存并创建对象
2、初始化对象的属性和状态
3、通过引用来访问和操作对象
4、当对象不再被引用时,垃圾回收器会回收对象所占用的内存
类和对象的一些注意事项
注意事项
- 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义
Student Car Animal
- 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)
- 成员变量本身存在默认值,同学仔定义成员变量时一般来说不需要赋初值
package com.sangria.learn
//Student.java
public class Student{
String name;
double chinese;
double math;
public void printTotalScore(){
System.out.printIn(name+"总成绩是:"+(chinese+math));
}
public void printEverageScore(){
System.out.printIn(name+"平均成绩是:"(chinese+math)/2.0);
}
}
package com.sangria.learn
//Test1.java
public class Test1(){
public static void main(String90 args){
Student s = new Student();
System.out.printIn(s.name);
System.out.printIn(s.chinese);
System.out.printIn(s.math);
}
}
输出结果:
null
0.0
0.0
- 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名
- 对象与对象之间的数据不会相互影响,但是多个变量指向同一个对象时就会互相影响
- 如果某个对象没有一个变量引用他,则该对象无法被操作了,该对象会成为所谓的垃圾对象
this
this是什么
this是一个变量,可以用在方法中,来拿到当前的对象
//Test.java
public class Test{
public static void main(String90 args){
Student s1 = new Student();
System.out.printIn(s1);
s1.printThis();
Student s2 = new Student();
System.out.printIn(s2);
s2.printThis();
}
}
//Student.java
public class Student{
public void printThis(){
System.out.printIn(this);
}
}
this的执行原理
在 Java 中,`this` 是一个关键字,用于引用当前对象。当在一个对象的方法或构造方法中使用 `this` 时,它会指向调用该方法或构造方法的对象本身。`this` 可以用来访问对象的属性和方法,或者在构造方法中调用其他构造方法。简单来说,`this` 就是当前对象的一个“自我指针”,帮助对象在自己的方法中访问自己的属性和方法。
this的应用场景:
this用于解决:变量名称冲突问题
//Studnet.java
public class Student{
double score;
public void printThis(){
System.out.printIn(this);
}
public void printPass(double score){
if(this.score>score){ //当前对象的成绩是否大于....的分数
System.out.printIn("恭喜您,您成功考入了哈佛大学!");
}else{
System.out.printIn("落选了");
}
}
}
// Test.java
public class Test{
public static void main(String[] args){
Student s3 = new Student();
s3.score = 325;
s3.printPass(300);
}
}
构造器
认识构造器
public class Student{
public Student(){
...
}
}
构造器的名字和当前类名字相同,且不写返回值类型,当你写了这样的方法,那这样的方法我们就称之为构造器
构造器的特点
创建对象时,对象会去调用构造器
构造器的应用场景
创建对象时,,同时完成对对象成员变量(属性)的初始化赋值
//没有构造器时,需要先new对象再赋值
Student s1 = new Student();
s1.name = "张三";
s1.score = 100;
//有构造器一句话解决
Student s1 = new Student("张三",100);
构造器的注意事项
- 类在设计时,如果不写构造器,java会为类自动生成一个构造器
- 一旦定义了有参数构造器,java就不会帮我们的类自动生成无参构造器了,此时就建议自己手写一个无参数构造器出来了
封装
面向对象的三大特征:封装、继承、多态
什么是封装
类设计对象处理某一个事物的数据时,应该吧要处理的数据,以及处理这些数据的方法,设计到一个对象中去
封装的设计规范
合理隐藏,合理暴露
//Student.java
public class Student{
private double score;
//这里我们的需求是需要别人能给输入成绩,但是又不能让别人瞎赋值,所以我们可以先让这个变量私有private,然后写出对应的方法让别人可以对成绩赋值,但是又不能乱赋值
public void setScore(double score){
if(score >= 0&& score <= 100){
this.score = score;
}else{
System.out.printIn("数据非法!");
}
}
public double getScore(){
return score;
}
public void printPass(){
System.out.printIn(score>=60?"成绩合格":"成绩不合格");
}
}
//Test.java
public class Test{
Student s1 = new Student();
s1.setScore();
System.out.printIn(s1.getScore());
}
}
代码层面如何控制对象的成员公开或者隐藏
公开成员:可以用public修饰
隐藏成员:使用private修饰
实体JavaBean
实体类是什么
就是一种特殊形式的类
- 这个类中的成员变量都要私有,并且对外提供相应的getXxx,setXxx方法
- 类中必须要有一个公共无参的构造器
public class Student{
private String name;
private double score;
}
快速书写get、set方法——右键——generate——getter and setter
因为两个成员变量都需要生成get、set方法,所以按住shift点击未被选中的(非蓝色的)然后下方的ok即可
第二个要求就是:需要一个无参数构造器,但是因为java会自动生成无参数构造器,所以我们不用写,但是很多情况有参数构造器是可以方便别人的使用,所以我们可以写一个有参数构造器,再写一个无参数构造器(有了有参数构造器,java不再自动生成无参数构造器),这里有参数构造器也不需要我们自己去写,可以生成:
右键——generate——constructor(构造器)——shift选中所有即可
现在写无参数构造器,这个也可以生成:
同样的constructor——然后下方的select None
实体类特点和应用场景
实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离
特点:
在 Java 中,实体类(Entity Class)是一种用于表示业务对象或数据模型的类,其特点是以封装数据为主,通常包含私有成员变量、对应的 getter 和 setter 方法、构造器以及一些业务逻辑方法,遵循 Java 的封装原则,将数据和操作数据的方法绑定在一起。应用场景:
实体类在 Java 开发中应用广泛,比如在 Java 持久层技术(如 Hibernate、MyBatis 等)中用于映射数据库表,实现对象与关系数据库之间的数据交互;在 Java Web 开发中,用于封装前端传来的请求数据或向前端传递响应数据,作为数据传输对象(DTO),确保数据的完整性和一致性,提高代码的可维护性和可读性。
刚刚学习到的小技巧:快速对一段代码加比如while语句
选中该段代码 ctrl+shift+T然后选择需要的代码即可
补充:成员变量、局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中,方法外 | 常见于方法中 |
初始化位置不同 | 有默认值,不需要初始化赋值 | 没有默认值 |
内存位置不同 | 堆内存 | 栈内存 |
作用域不同 | 整个对象 | 在所归属的大括号中 |
生命周期不同 | 与对象共存亡 | 随着方法的调用而生,随着方法的运行结束而亡 |