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

02. java: 类与对象

本章将复盘类与对象的学习,内容较多,建议反复观看视频


一、什么是面向对象?

面向对象是解决问题的一种思想,主要通过与对象之间的交互来实现一件事情

面向过程恰恰与之相对,就以洗衣服为例:

启动洗衣机来完成洗衣服叫面向对象,用户只关心是洗衣机这个对象洗干净了衣服

洗衣服的过程如烘干、脱水等叫面向过程


二、什么叫类?

类就相当于对一个对象进行描述,好比洗衣机各种性能的描述(大小、功率、长度、高度等等)

它的属性被定义出来以后叫做成员变量,它要实现的功能定义出来叫做成员方法

class WashMashine{//成员变量public int length;public int hight;public String type;//成员方法public void washcloth{System.out.println("洗衣功能");}public void drycloth{System.out.println("烘干功能");}}

注意:

1、此处定义的方法没有加static,这个后面会解释

2、一个文件里最好只创建一个类


三、类的实例化

上面通过class相当于是定义出了一个类的模板,接下来我们要对其实例化,也就是用类的类型创建对象的过程

1、如何实例化

public class java0530 {public static void main(String[] args) {int a = 10;Dog dog1 = new Dog();Dog dog2 = new Dog();}
}

比如上面这样做就是定义了一个Dog类型的变量

2、如何访问对象中的成员

class Dog {//成员变量public int age;public String type;public String name;//成员方法public void bark() {System.out.println(name + "在汪汪汪");}public void sleep() {System.out.println(name + "在睡觉");}}
public class java0530 {public static void main(String[] args) {int a = 10;Dog dog1 = new Dog();dog1.name = "旺财";dog1.type = "金毛";dog1.age = 10;dog1.bark(); //调用成员方法Dog dog2 = new Dog();}
}

这里就是通过变量名后加.的方式进行赋值,成员方法也是如此

应用:两个实参值的交换

public class java0601 {public static void swap(Dog a, Dog b){int temp =a.num;a.num= b.num;b.num=temp;}public static void main(String[] args) {Dog a = new Dog();a.num = 80;Dog b = new Dog();b.num = 40;System.out.println(a.num+" "+b.num);swap(a,b);System.out.println(a.num+" "+b.num);}}

注意这里的Dog中定义的变量类型不应该为static,否则会交换失败


四、this关键字

this起到一个指向当前对象的作用,可以理解成谁调用成员方法,谁就是this对象

class Dog {//成员变量public static int age;public static String type;public static String name;//成员方法public void setDog(int a, String t, String n){this.age = a;this.type = t;this.name = n;}
public class java0530 {public static void main(String[] args) {Dog dog1 = new Dog();dog1.setDog(10, "金毛", "旺财");dog1.printDog();}}

这几行代码起到不用一个个给成员变量赋值的作用

这里如果成员变量和形参名字相同并且刚好没有this时,那就相当与形参自己给自己赋值,最后结果是0

总结:this的作用

1、this. 成员变量    // 访问对象的成员变量

2、this. 成员方法    // 访问对象的成员方法

3、this.()                     //调用其他构造方法


五、对象的构造及初始化

构造方法是一种特殊的方法,没有返回值,并且方法名和类名一样

它的主要目的就是初始化成员变量

class Dog {//成员变量public static int age;public  static String type;public  static String name;//构造方法public Dog(int a,String b,String c){this.age = a;this.type = b;this.name = c;}
}
public class java0601 {public  static void main(String[] args) {Dog dog3 = new Dog(10,"旺财","金毛");Dog.printDog();}

在你没有创建一个构造方法之前,编译器为自动给你一个不带参数的构造方法

这个过程就是在你new一个对象的时候开始的

一旦有了一个构造方法,编译器就不再提供了(有用的一句话)


六、封装

将数据和操作数据的方法进行有机结合,隐藏对象的属性的实现细节,

进对外公开接口来对对象进行交互

面向对象程序的三大特性:封装,继承,多态

来看下面这两段代码:

package bit;public class demo1 {private int age;private String name;public demo1(int age, String name) {this.age = age;this.name = name;}public String getname(){return this.name;}public void setname(String name){this.name = name;}
}
package bit;public class demo2 {public static void main(String[] args) {demo1 student = new demo1(15,"张三");student.setname("李四");System.out.println(student.getname()); //通过调用来访问封装的成员变量}
}

这就是一个简单的封装手段,通过private让成员变量只能在本类名以内被调用,如果想使用就通过引用方法


七、static静态变量

1、static修饰成员变量

在成员变量前加static就是静态成员变量,此时的静态成员变量就不在堆上了,因此不依赖于对象(不用实例化对象),直接使用 类名.静态成员变量 就可以进行访问

public class demo1 {private int age;private String name;public static String classroom;public demo1(int age, String name) {this.age = age;this.name = name;}
}
public class demo2 {public static void main(String[] args) {demo1 student = new demo1(15,"张三");demo1.classroom = "16班";System.out.println(demo1.classroom);
}
}

注意:

此时这个成员变量就只有一份了

引用对象强行访问不会报错,但它本身并不合理

2、static修饰成员方法

同样的,要想调用这个静态成员方法,也是采取类名.静态成员方法的形式

public class demo1 {private int age;private String name;public static String classroom;public demo1(int age, String name) {this.age = age;this.name = name;}public void Function1(){System.out.println("非静态成员变量");}public static void Function2(){System.out.println("静态成员变量");demo1 student1 = new demo1(13,"李四");student1.Function1();}
}
public class demo2 {public static void main(String[] args) {demo1.Function2();}
}

这里需要着重注意的点是:

1、在一个静态成员方法中不可以调用一个非静态成员方法,如果非要调用则需要在其内部加入这个非静态成员方法所引用的对象

2、同样的,在方法中调用对象也是如此

3、静态方法中不能使用this(因为静态方法不依赖对象,不确定this到底是谁)


八、代码块(发现看不懂就火速复习)

执行顺序:1、静态代码块(都是静态就按顺序执行)

                    2、实例化代码块(都是实例化就按顺序执行)

                    3、构造代码块

那个静态代码块则是在类被加载时才会执行:

上面这个程序的执行结果就是:

因为在实例化第一个对象时类就被加载了一次,后面没有加载了


http://www.lqws.cn/news/185059.html

相关文章:

  • DeepSeek 提示词大全
  • 森马下沙奥莱旗舰店盛大启幕:以“新常服“理念重塑消费体验新范式
  • NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析
  • LangChain【7】之工具创建和错误处理策略
  • MongoDB慢查询临时开启方法讲解
  • IBM官网新闻爬虫代码示例
  • 前端删除评论操作(局部更新数组)
  • 管家婆财贸软件反月结存详细操作流程
  • 三台战略驱动未来平台化发展:开发、开放与业务的协同演进
  • AT2659_GNSS低噪声放大器芯片
  • Typeerror: cannot read properties of undefined (reading ‘XXX‘)
  • 【学习分享】shell基础-运算符
  • ai流式文字返回前端和php的处理办法
  • 网络编程之服务器模型与UDP编程
  • 【Linux跬步积累】—— 网络编程套接字(二)
  • k8s入门教程(集群部署、使用,镜像拉取失败网络问题排查)
  • VTK|8.2.0升级到9.4.2遇到的问题及解决方法
  • 上市公司数字化转型分析报告_本报告基于CSMAR数据库中的企业数字化转型相关数据,使用Python对A股上市公司数字化转型情况进行全面分析
  • elasticsearch基本操作笔记
  • 02 nginx 的环境搭建
  • 12.5Swing控件3Jpanel JOptionPane
  • 机器学习笔记【Week7】
  • MS8258D 高增益带宽积 FET 输入放大器/激光雷达接收跨阻放大器
  • 【Linux】文件操作
  • SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
  • 数据结构与算法——二叉树高频题目(1)
  • 【原神 × 二叉树】角色天赋树、任务分支和圣遗物强化路径的算法秘密!
  • CANFD 数据记录仪在汽车售后解决偶发问题故障的应用
  • [蓝桥杯]矩阵翻硬币
  • 矩阵QR分解