章节三、6-Getters-Setters和this关键字part02
一、如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员,如下:
//如何在一个类中创建另外一个类的对象,然后用这个类的对象的引用来访问这个对象里面的成员
Car bm = new Car();
bm.setYear();
System.out.println(bm.getYear());
二、为什么我们要用私有修饰符来修饰变量,然后通过get和set方法来访问?
通过get和set这种间接的方式来访问私有变量,其实是用到了java中的“封装”。
隐藏实现细节,对外提供公共的访问方式,私有的成员变量,比如make只能在Car类中被直接访问,而其它的类,比如ClassDemo只能通过set和get方式来调用访问,这样做的目的是为了安全,同时通过set和get方法来访问能够做判断,如果在传值的时候传入的是非法值,set判断后就不会允许成功赋值,举例如下(对年份进行判断):
package introduction;
public class Car {
//颜色
private String color;
//生成商
public String make;
//型号
private String model;
//年份
private int year;
//车拥有一个加速度的功能
public void acceleration() {
System.out.println("加速度了.....");
}
/*
* 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make
* 定义为make2,此处为了方便其它类调用,所以取名相同。
* 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量,
* 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值,
* 同时也方便调用者进行区分,
* 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make,
* 这个make2是局部变量,make1是成员变量。
* 所以为了区分这两个make,就有了关键字this,
* 使用格式为“this.”,使用了该关键字后就能够区分局部变量和成员变量,
* 在成员变量前面加上this后变为“this.make=make”
*/
public void setMake(String make) {
//哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值
this.make = make;
}
//因为make是字符串类型,所以返回的make也是字符串类型,
//get的目的是为了返回这个成员变量的值给调用者
public String getMake() {
return this.make;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getYear() {
return year;
}
public void setYear(int year) {
if(year>1990) {
this.year = year;
}else {
System.out.println("年份无效");
}
}
}
在ClassDemo类中调用:
Car bm = new Car();
bm.setYear(1997);
System.out.println(bm.getYear());
结果:
传入的值大于“1990”则显示传入的值,否则显示为“年份无效”并显示默认值“0”(这就是私有权限时使用set能够方便进行判断)
三、封装:是面向对象的重要法则,就是把对象的属性和行为结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
四、凡是访问了对象里数据的方法,都有this的引用,只是当变量名重名时才显式的写出了加以区分。
章节三、6-Getters-Setters和this关键字part02的更多相关文章
- 执行Go程序的三种方式及Go语言关键字
执行 Go 程序的三种方式及 Go 语言关键字 执行 Go 程序的三种方式 一.使用 go run 命令 二.使用 go build 命令 Step1. 对 go 源码源文件执行 go build 命 ...
- 章节三、5-Getters-Setters和this关键字part01
我们新建第一个Car类: package introduction; public class Car { //颜色 private String color; //生成商 private Strin ...
- 三、线程同步之Sysnchronized关键字
线程同步 问题引入 观察一面一段小程序: public class Main { private static int amount = 0; public static void main(Stri ...
- JAVA面对对象(三)——Super、static、final关键字
Super 使用super关键字可以直接调用父类中的构造方法.属性.普通方法 super调用父类构造方法的操作,与this调用构造方法一样,语句必须放在子类构造方法的首行 public class P ...
- flask-admin章节三:数据库迁移工具 alembic初步使用
1. 概述 基于flask框架构建web,一般会使用sqlchemy(在flask中使用sqlchemy可以参考这里)作为数据库引擎. 这样业务的逻辑就可以做到不跟具体的数据库类型相耦合,具体后端业务 ...
- 【外文翻译】 为什么我要写 getters 和setters
原文作者: Shamik Mitra 原文链接:https://dzone.com/articles/why-should-i-write-getters-and-setters 当我开始我的java ...
- Android最佳性能实践(三)——高性能编码优化
在前两篇文章当中,我们主要学习了Android内存方面的相关知识,包括如何合理地使用内存,以及当发生内存泄露时如何定位出问题的原因.那么关于内存的知识就讨论到这里,今天开始我们将学习一些性能编码优化的 ...
- [Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程
[Learn Android Studio 汉化教程]第三章:使用 Android Studio 编程 本章包含如何在 Android Studio 中书写或生成代码. Android Studio ...
- SpringMVC4+thymeleaf3的一个简单实例(篇三:页面参数获取)
本篇将通过示例介绍页面参数是如何传递到后台的.我们继续沿用之前搭好的程序结构,如果你不知道,请参照前两篇.为方便跳转页面,我们在首页以及zoolist.html页面都加上彼此地址的链接:首页: zoo ...
随机推荐
- 解决spring的bean同名冲突
今天工作发现当不同模块下有相同bean然后又被同一个模块引用的话就会导致bean同名冲突,如下: 解决方案很简单,如果是xml配置直接修改bean的名称即可,如果是注解形式修改如下: 只要在servi ...
- .Net RabbitMQ之消息通信 构建RPC服务器
1.消息投递服务 RabbitMQ是一种消息投递服务,怎么理解这句话呢?即RabbitMQ即不是消息的生产者,也是消息的消费者.他就像现实生活中快递模式,消费者在电商网站上下单买了一件商品,此时对应的 ...
- mysql 架构篇系列 3 复制运行状态监控与选项参数说明
一. 概述 在上一篇中,搭建了一主一从的复制架构,这篇通过一些诊断方法来了解复制的运行状态和一些选项参数说明.上次mysql主从服务关机,今天在打开mysql服务,出现了错误信息. 1.首先 启动主从 ...
- python 备忘
import jsonu='''{ "maps": [ { "id": "blabla", "iscategorical" ...
- find命令高级参数
find 命令参数大全 转自[https://www.cnblogs.com/yorkyang/p/6294894.html] Linux中find常见用法示例 ·find path -op ...
- jvm详情——1、堆中存什么?栈中存什么?
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...
- MFC 控件编程之水平滚动条跟垂直滚动条
MFC 控件编程之水平滚动条跟垂直滚动条 一点水平滚动条的操作 首先在操作滚动条的时候.我们要知道滚动条的一些属性. 比如我们要设置 最大值 最小值. 以及每次递增的值是多少.都要设置. 所有就有一个 ...
- 【原创】Python第一章
Python总是从第一行代码开始逐步执行,而C是从main函数开始执行. 在Python中,一切东西都是对象. 在Python中,没有C的花括号,不能任意排版,属于同一个语句块的语句需 ...
- Nginx下关于缓存控制字段cache-control的配置说明 - 运维小结
HTTP协议的Cache -Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程.请求时的缓存指令包括: no ...
- Map<String, Object>转Object,Object转 Map<String, Object>
Map转Object import com.alibaba.fastjson.JSON; Map<String, Object> boneAgeOrderMap=boneAgeOrderS ...