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岁了*/
相关文章
|
9天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
56 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
19天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
100 13
|
24天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
56 10
|
17天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
54 2
|
27天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
29天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
56 8
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
25 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)