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

java知识四(面向对象编程)

对象是一种特殊的数据结构,可以用来记住一个事物的数据,从而代表该事务

第一章 面向对象编程快速入门

① 先设计对象的模板,也就是对象的设计图:类。
② 通过new关键字,每new一次类就得到一个新的对象

packagecom.kgl.object;publicclassStar{Stringname;intage;doubleheight;doubleweight;}
packagecom.kgl.object;publicclassTest{publicstaticvoidmain(String[]args){Starstar=newStar();star.name="张三";star.age=18;star.weight=50.0;star.height=178.0;Starstar1=newStar();star1.name="李四";star1.age=18;star1.weight=50.0;star1.height=168.0;}}

1.1 对象
对象本质上是一种特殊的数据结构(可以理解为一张表),对象是用类new出来的,有了类就可以创建出对象。

publicclass类名{// 1、变量,用来说明对象可以处理什么数据// 2、方法,描述对象有什么功能,也就是可以对数据进行什么样的处理...}

语法格式:类名 对象名 = new 类名();
万物皆对象,谁的数据谁存储。

第二章 构造器

publicclassStudent{/** 构造器 */publicStudent(){...}}

2.1 构造器
构造器是一种特殊方法,不能写返回值类型,名称必须是类名。
创建对象时,对象会立即自动调用构造器执行

Students=newStudent();

2.2构造器的常见应用场景
构造器常用于完成对象初始化,创建对象时,同时完成对对象成员变量(属性)的初始化赋值。
2.3构造器的注意事项
类默认就自带了一个无参构造器
如果为类定义了有参数构造器,类默认的无参数构造器就没有了,此时如果还想用无参数构造器,就必须自己手写一个无参数构造器出来。

第三章 this 关键字

是一个变量,可以用在方法中,来拿到当前对象。哪个对象调用这个方法,this就拿到哪个对象。
主要用来解决:对象的成员变量与方法内部变量的名称一样时,导致访问冲突问题

publicclassStudent{Stringname;doublescore;publicvoidprint(){System.out.println(name);System.out.println(this);}publicvoidprintHobby(Stringname){System.out.println(this.name+"喜欢"+name);}publicvoidcheckPass(doublescore){if(this.score>=score){System.out.println("恭喜您,考上哈佛,走向巅峰~~~");}else{System.out.println("不好意思,您没有考上~~~");}}}
publicclassTest{publicstaticvoidmain(String[]args){Students1=newStudent();s1.name="张三";s1.print();System.out.println(s1);System.out.println("-----------------------------------");Students2=newStudent();s2.print();System.out.println(s2);System.out.println("-----------------------------------");Students3=newStudent();s3.name="李四";s3.printHobby("读书");System.out.println("-----------------------------------");s3.score=80;s3.checkPass(90);}}

输出

张三com.kgl.thisdemo.Student@3b07d329com.kgl.thisdemo.Student@3b07d329-----------------------------------nullcom.kgl.thisdemo.Student@41629346com.kgl.thisdemo.Student@41629346-----------------------------------李四喜欢读书-----------------------------------不好意思,您没有考上~~~

第四章 封装

面向对象的三大特征:封装、继承、多态。
定义:就是用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
4.1 封装的设计规范
合理隐藏:使用private关键字(私有,隐藏)修饰成员变量,就只能在本类中被直接访问,其他任何地方不能直接访问。
合理暴露:使用public修饰(公开)的get和set方法合理暴露,成员变量的取值和赋值。
4.2 代码层面控对象的成员公开或隐藏
公开成员:可以使用public(公开)进行修饰。
隐藏成员:使用private(私有,隐藏)进行修饰。

publicclassStudent{Stringname;privateintage;privatedoublechinese;privatedoublemath;publicvoidsetAge(intage){if(age<0||age>100){System.out.println("输入的年龄有误");return;}this.age=age;}publicintgetAge(){returnage;}}
publicclassTest{publicstaticvoidmain(String[]args){Students1=newStudent();s1.setAge(-15);System.out.println(s1.getAge());}}

第五章 实体类 Javabean

5.1 定义
是一种特殊类,类中要满足如下需求:
要求 1:类中的成员变量全部私有,并提供public修饰的getter/setter方法。在IDEA中可以通过右键菜单->Generate->Getter and Setter快速生成。
要求 2:提供get、set 方法,类中需要提供一个无参数构造器,有参数构造器可选。 在IDEA中可以通过右键菜单->Generate->constructor->select None/ok快速生成。
5.2 实体类应用场景
核实体类的对象只负责数据存取,而对数据的业务处理交给其他类的对象来完成,以实现数据和数据业务处理相分离。
用来保存数据的java类,可以用它创建对象,保存某个事物的数据。

// 实体类:Student (只负责存数据)publicclassStudent{privateStringname;privatedoublescore;// getter setter 方法...// 生成Getter/Setter:在IDEA中可以通过右键菜单->Generate->Getter and Setter快速生成。}
// 业务类:StudentOperator (负责处理逻辑)publicclassStudentOperator{privateStudents;publicStudentOperator(Students){this.Student=s;}// 打印总成绩// 打印平均成绩// ...}

5.3 实操
5.3.1 定义实体类

packagecom.kgl.Javabean;publicclassStudent{privateStringname;privatedoublechinese;privatedoublemath;publicvoidsetName(Stringname){this.name=name;}publicvoidsetChinese(doublechinese){this.chinese=chinese;}publicvoidsetMath(doublemath){this.math=math;}publicStringgetName(){returnname;}publicdoublegetChinese(){returnchinese;}publicdoublegetMath(){returnmath;}publicStudent(){}publicStudent(Stringname,doublechinese,doublemath){this.name=name;this.chinese=chinese;this.math=math;}}

5.3.2 业务类

packagecom.kgl.Javabean;publicclassStudebtOperator{privateStudents;publicStudebtOperator(Students){this.s=s;}publicvoidprinttotalScore(){System.out.println(s.getName()+"的语文成绩是"+s.getChinese()+",数学成绩是"+s.getMath());}publicvoidprintavgScore(){System.out.println(s.getName()+"的总成绩是"+(s.getChinese()+s.getMath())+",平均成绩是"+(s.getChinese()+s.getMath())/2);}}

5.3.3 调用

packagecom.kgl.Javabean;publicclassTest{publicstaticvoidmain(String[]args){Students1=newStudent();s1.setName("播妞");s1.setChinese(80.0);s1.setMath(90.0);System.out.println(s1.getName()+"的语文成绩是"+s1.getChinese()+",数学成绩是"+s1.getMath());System.out.println("-------------------------------------------");Students2=newStudent("播仔",90.0,80.0);StudebtOperatoroperator=newStudebtOperator(s2);operator.printtotalScore();operator.printavgScore();}}

第六章 static关键字

6.1 定义
叫静态,可以修饰成员变量、成员方法。
成员变量按照有无static修饰,分为两种:
6.1.1 静态变量(类变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
6.1.2 实例变量(对象的变量):无static修饰,属于每个对象的。

publicclassStudent{// 静态变量staticStringname;// 实例变量(对象的变量)intage;}

Student学生表中包含static name和age字段。
s1对象和s2对象各自拥有独立的age值(均为0),但共享同一个name字段。
推荐访问方式:类名.静态变量;不推荐:对象.静态变量。
实例变量只能通过 对象.实例变量 访问。
6.2 static修饰成员变量 — 成员变量的执行原理

publicclassStudent{// 类变量 静态变量:有static修饰,属于类,只加载一份,可以被类和类的全部对象共享staticStringname;// 实例变量(对象变量) 没有static修饰,属于对象,每个对象都有一份intage;}
publicclassTest{publicstaticvoidmain(String[]args){// 1、类变量的用法// 类名.静态变量(推荐)Student.name="袁华";// 对象.静态变量(不推荐)Students1=newStudent();s1.name="马冬梅";Students2=newStudent();s2.name="秋雅";System.out.println(s1.name);// 秋雅System.out.println(Student.name);// 秋雅// 2、实例变量的用法// 对象.实例变量s1.age=23;s2.age=18;System.out.println(s1.age);// 23// System.out.println(Student.age); // 报错}}

第七章 静态方法

如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义成静态变量来记住。
同一个类中访问静态成员可以省略类名不写,在某个类中访问其他类里的类变量,必须带类名访问
7.1 static修饰方法
成员方法的分类
7.1.1 静态方法:有 static 修饰的成员方法,属于类。可以直接用类名访问,也可以用对象访问

publicstaticvoidprintHelloWorld(){System.out.println("Hello World!");System.out.println("Hello World!");}

7.1.1.1 调用方式:
类名.静态方法 (推荐)
对象名.静态方法 (不推荐)
7.1.1.2 案例
系统启动后,要求用户类可以记住自己创建了多少个用户对象了。

publicclassUser{// 静态变量publicstaticintnumber;// 构造器publicUser(){User.number++;//注意:同一个类中访问静态成员可以省略类名不写number++;System.out.println("创建了一个对象,当前对象数量为:"+number);}}
publicclassTest2{publicstaticvoidmain(String[]args){// 目标:了解静态变量的应用。newUser();newUser();newUser();System.out.println(User.number);}}

7.1.2 实例方法:无 static 修饰的成员方法,属于对象。只能用对象访问

publicvoidprintPass(){...}

调用方式:对象.实例方法

如果方法只是为了做一个功能且不需要直接访问对象的数据,这个方法直接定义成静态方法
如果这个方法是对象的行为,需要访问对象的数据,这个方法必须定义成实例方法

publicclassStudent{privatedoublescore;publicvoidprintpass(){System.out.println(score>60?"通过":"未通过");}publicstaticvoidprint(){System.out.println("hello world");}publicvoidsetScore(doublescore){this.score=score;}}
publicclassTest{publicstaticvoidmain(String[]args){Student.print();//hello world// Student.printpass();Students1=newStudent();s1.print();//hello worlds1.setScore(80.0);s1.printpass();//通过printhello();//hello world1Test.printhello();//hello world1}publicstaticvoidprinthello(){System.out.println("hello world1");}}

7.2 main方法

publicclassTest{publicstaticvoidmain(String[]args){...}}

属于类方法,实际执行是 java Test ----> Test.main(…),调用了方法。见上代码Test.printhello();//hello world1

http://www.gsyq.cn/news/1485186.html

相关文章:

  • IDEA + Maven Assembly Plugin:一条命令打包含所有依赖的JavaFX Jar,再用exe4j生成轻量exe
  • 赣州母婴除甲醛CMA甲醛检测治理公司深度测评:绿呼吸环保稳居榜首 - 一修哥咨询
  • 第33章:AI辅助SocialFi开发——Lens协议集成
  • 可形变模型原理与实战:从PCA降维到足部三维参数化建模
  • 终极游戏语言障碍终结者:XUnity.AutoTranslator完整指南
  • B站光科教程之外:Light Tools新手快速上手的5个隐藏技巧和界面冷知识
  • AI生成excel表格“AI导出鸭”:结构化数据流转的深度测评与工程实证
  • 深度解锁NVIDIA显卡潜能:Profile Inspector完全使用手册
  • Django安全检测实战包:自动爬取URL+多类型漏洞识别+MySQL注入验证
  • AI幻觉不是Bug,而是智能体的预测性编码本能
  • MuleSoft+LLM企业级AI编排:构建可治理、可审计、可落地的认知流水线
  • 高州母婴除甲醛CMA甲醛检测治理公司深度测评:绿呼吸环保稳居榜首 - 一修哥咨询
  • 第36章:AI辅助合约性能压测——使用loadtest、forge snapshot
  • 藁城母婴除甲醛CMA甲醛检测治理公司深度测评:绿呼吸环保稳居榜首 - 一修哥咨询
  • Win10老显卡焕新记:GTX 1660 SUPER安装最新TensorFlow/PyTorch前的CUDA踩坑实录
  • AD9831输出不过零?一个电容或变压器就能搞定(附Multisim仿真验证)
  • Mythos推理能力解析:多跳因果链与反事实推演的工程化实现
  • 深度挖掘显卡潜能:NVIDIA Profile Inspector终极配置指南
  • 光腿神器厂家直销 - 奔跑123
  • 从‘哑巴’到‘对话’:用DBC文件手把手教你理解Autosar CAN网络里的‘信号语言’(保姆级解析)
  • 01HTML预备知识
  • 高要母婴除甲醛CMA甲醛检测治理公司深度测评:绿呼吸环保稳居榜首 - 一修哥咨询
  • 从一次线上OOM排查实战出发:手把手教你用Visual VM分析堆dump和线程死锁
  • Jaspersoft Studio报表模板设计避坑大全:从‘元素超出框架’到‘条码显示明文’的10个常见错误修复
  • 前端项目:SpeakMentor AI 场景化英语口语陪练助手开发复盘
  • 深入涂鸦Wi-Fi模组协议栈:手把手解析MCU与模组间的数据帧(含心跳、配网、OTA全流程)
  • 保姆级教程:在Windows 10上从零部署PaddleOCR C++推理库(含OpenCV配置与常见编译报错解决)
  • 保姆级避坑指南:SAP SPRO中给公司代码分配采购组织,新手最容易搞混的几点
  • Nsight System + Nsight Compute 组合拳:从宏观Timeline到微观Counter的CUDA应用全链路性能分析实战
  • 2026 安徽淮北市|本地人必选旧房改造・墙面刷新・局部装修 3 家正规企业精选 + 避坑攻略 - 本地便民网