Java开发——8.面向对象的特点(一):封装+this(与static关系)

简介: 面向对象的特点:封装、继承和多态。

面向对象的特点:封装、继承和多态。


封装(private)

用private关键字修饰的成员变量或者方法,但是在日常使用时不拿它来修饰方法,因为既然定义了方法就是可以供外部调用使用的,所以一般使用public、static、final或者protected修饰,如果你真想需要用起来关键字、修饰符来修饰的也是可以的。


我们一般用private来封装成员变量,因为一些私有的属性不想被外部类访问或者修改;例如,身份证信息,这是私有的属性,我们并不想被他人随意访问修改,我们就可以把它设置为私有的,只有调用我们指定的方法才能获取和修改该内容。


private关键字,配合getXXX()和setXXX()方法使用,无疑getXXX()是获取该内容并返回给用户;setXXX()是修改该内容。


//此时的userID和userName就是封装之后的成员变量//用户如果想要访问的话,只能通过get字段名+set字段名,进行属性的访问和修改publicclassStudent {
// 1.定义学生的属性Stringname;
intage;
Stringsex;
privateStringuserID;  //定一个私有属性,外部方法不能随意调用(只能让set/get方法访问调用)privateStringuserName;
// 2.定义学生能实现的方法publicvoidlearning(){
System.out.println(name+",可以好好学习!");
    }
// 3.学生能实现吃饭方法publicvoideat(){
System.out.println(name+",吃饭");
    }
// 4.打印userIDpublicvoidprintUserId(){
System.out.println("身份证号为:"+userID);
    }
// 5.定义一个 get 方法让用户可以获取身份证号publicStringgetUserID(){
returnuserID;
    }
// 6.定义一个 set 方法让用户可以修改身份证号publicvoidsetUserID(StringuserID){
this.userID=userID;
    }
publicStringgetUserName() {
returnuserName;
    }
publicvoidsetUserName(StringuserName) {
this.userName=userName;
    }
// 无参构造方法publicStudent(){
//无参构造一般不打印内容//System.out.println("我是无参构造方法");    }
// 有参构造方法publicStudent(StringuserID,StringuserName){
this.userID=userID;
this.userName=userName;
    }
}


this关键字:

this是代表当对象的引用(谁调用this,this就指代谁)。this一般指代当前类;当一个对象创建成功之后(在执行该类的构造方法之前对象就已经被创建了),Java虚拟机就会动态的为该类分配一个引用,这个引用指向的就是被创建出来的对象,并且该引用的名字为this,所以this指代的就是当前类。

this.成员变量      本类的成员变量  

this.成员方法      本类的成员方法

this.构造方法      本类的构造方法


this关键字的使用场景:

  1. 当成员变量和局部变量重名的时候,可以用this关键字来指代成员变量;
  2. 引用本类身的构造方法;注意:this调用构造方法的话,要放在方法中第一行使用;
  3. 返回当前对象的引用,常在方法后面写 return this (increment()通过this关键字返回了当前对象的引用,此处只了解)。


注意:后面还有super关键字,它是是使用在具有继承关系的实现类中,用于调用父类中的属性或者构造方法,注意区分。



//此时的userID和userName就是封装之后的成员变量//用户如果想要访问的话,只能通过get字段名+set字段名,进行属性的访问和修改publicclassStudent {
// 1.定义学生的属性Stringname;
intage;
Stringsex;
// 2.定义学生能实现的方法publicvoidlearning(){
System.out.println(name+",可以好好学习!");
    }
// 无参构造方法publicStudent(){
//无参构造一般不打印内容//System.out.println("我是无参构造方法");    }
// 有参构造方法publicStudent(Stringname,intage){
this.name=name;
this.age=age;
    }
// 重载的有参构造方法publicStudent(Stringname,intage,Stringsex){
this();
this.name=name;
this.age=age;
this.sex=sex;
    }
// 输出打印学生的相关信息publicvoidsutMassage(){
System.out.println("name:"+name+",age:"+age+",sex:"+sex);
    }
}



//Student的实现类publicclassStudentAchieve {
publicstaticvoidmain(String[] args) {
Studentstu=newStudent("小明",66,"男");
stu.sutMassage();
  }
}
/*输出打印的内容:Student类的无参构造name:小明,age:66,sex:男*/



this关键字的注意事项:

1.this关键字只能在方法内部使用,表示对“该对象(调用this关键字的对象)”的引用。

2.this不能用于static方法中,因为this指代当前对象,而static没有对象。static修饰的方法为静态的方法,且静态方法只能调用静态方法。

此处大概了解一下什么是static关键字即可:

static 在java中是 静态的意思他可以用来修饰成员变量,成员方法和代码块 ;


static关键字的特点:

1.随着类的加载而加载,随着类消失而消失,所以不存在创建对象的说法;

2.优先于类的对象存在,不依赖于类的实例,被static关键字修饰的方法,可以通过直接 类名.static关键字修饰的方法;  即可实现静态方法的调用。

https://blog.csdn.net/qq_43399015/article/details/107676447

//注:静态方法只能被调用静态成员变量!publicclassStudent {
// 1.定义学生的属性staticStringname;
staticStringID ;
staticintage;
// 2.定义学生能实现的方法publicvoidlearning(){
System.out.println(name+",好好学习!");
    }
// 5.打印学生的所有属性信息publicstaticvoidstudentMess(){
System.out.println("我是:"+name+"\n我的学号是:"+ID+"\n我今年"+age+"岁了");
    }
//无参构造方法    publicStudent(){
System.out.println("Student类的无参构造");
    }
//有参构造方法publicStudent(Stringname,StringID,Stringsex){
this();
this.name=name;
this.ID=ID;
this.sex=sex;
    }
}



publicclassStudentAchieve {
publicstaticvoidmain(String[] args) {
Studentstu=newStudent("小明","202201246","男");
Student.studentMess(); //类名.static修饰的方法        }
    }
/*输出内容Student类的无参构造我是:小明我的学号是:202201246我今年66岁了*/
相关文章
|
8天前
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
44 5
|
1月前
|
机器学习/深度学习 人工智能 NoSQL
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
随着大模型的越来越盛行,现在很多企业开始接入大模型的接口,今天我从java开发角度来写一个demo的示例,用于接入DeepSeek大模型,国内的大模型有很多的接入渠道,今天主要介绍下阿里云的百炼模型,因为这个模型是免费的,只要注册一个账户,就会免费送百万的token进行学习,今天就从一个简单的可以执行的示例开始进行介绍,希望可以分享给各位正在学习的同学们。
234 3
JAVA接入DeepSeek大模型接口开发---阿里云的百炼模型
|
24天前
|
人工智能 Java 物联网
没有好的学历,Java开发未来的路应该怎么走?
在数字化时代,Java开发者即使没有高学历,也能通过拥抱新兴技术(如大模型应用与鸿蒙系统开发)、积累实战经验、持续学习新技能等途径实现职业突破。从参与开源项目到关注行业动态,再到规划技术专家或管理路线,建立人脉网络并利用教育平台提升能力,开发者可拓宽技术边界,适应日新月异的技术需求,在未来发展中占据一席之地。
|
1月前
|
缓存 安全 Java
java面试-基础语法与面向对象
本文介绍了 Java 编程中的几个核心概念。首先,详细区分了方法重载与重写的定义、发生阶段及规则;其次,分析了 `==` 与 `equals` 的区别,强调了基本类型和引用类型的比较方式;接着,对比了 `String`、`StringBuilder` 和 `StringBuffer` 的特性,包括线程安全性和性能差异;最后,讲解了 Java 异常机制,包括自定义异常的实现以及常见非检查异常的类型。这些内容对理解 Java 面向对象编程和实际开发问题解决具有重要意义。
56 15
|
2天前
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文以原理与示例结合的形式讲解 Java 开发者如何基于 Spring AI Alibaba 框架玩转 MCP。
|
2月前
|
人工智能 安全 IDE
一天成为Java开发高手:用飞算JavaAI实现十倍提效
“一天成为Java开发高手”曾被视为天方夜谭,但飞算JavaAI的出现改变了这一局面。这款AI开发助手通过智能引导、需求分析、自动化逻辑处理和完整代码工程生成,大幅简化了Java开发流程。它不仅帮助新手快速上手,还让资深开发者提高效率,减少调试时间。现在,参与“飞算JavaAI炫技赛”,展示你的开发实力,赢取丰厚奖品!
|
29天前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
|
1月前
|
搜索推荐 Java Android开发
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
|
1月前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
2月前
|
人工智能 Java 数据处理
Java高级应用开发:基于AI的微服务架构优化与性能调优
在现代企业级应用开发中,微服务架构虽带来灵活性和可扩展性,但也增加了系统复杂性和性能瓶颈。本文探讨如何利用AI技术,特别是像DeepSeek这样的智能工具,优化Java微服务架构。AI通过智能分析系统运行数据,自动识别并解决性能瓶颈,优化服务拆分、通信方式及资源管理,实现高效性能调优,助力开发者设计更合理的微服务架构,迎接未来智能化开发的新时代。
下一篇
oss创建bucket