Java私有方法运用场景_java6-3 封装和private关键字
1、 private:
是一个权限修饰符
可以修饰成员变量和成员方法
被其修饰的成员只能在本类中被访问
定义一个学生类:
成员变量:name,age
成员方法:show()方法
2、我们在使用这个案例的过程中,发现了一个问题:
通过对象去给成员变量赋值,可以赋值一些非法的数据。(年龄可以赋予负数)
这是不合理的。
应该是这个样子的:在赋值之前,先对数据进行判断。
判断到底在哪里做比较合适呢?
StudentDemo类是一个测试类,测试类一般只创建对象,调用方法。
所以,这个判断应该定义在Student类中。
而我们在成员变量的位置可不可以进行数据判断呢?
是不可以的,因为做数据校验,必须要依靠一些逻辑语句。
逻辑语句是应该定义在方法中的,所以,我们最终决定在Student类中提供一个方法
来对数据进行校验。
按照我们前面的分析,我们给出了一个方法进行校验。
但是呢,它偏偏不调用方法来赋值,还是直接赋值了,
这样我们的方法就没有起到作用。
我就应该要求你必须使用我的方法,而不能直接调用成员变量赋值。
怎么去强制要求不能直接使用成员变量呢?
针对这种情况,Java就提供了一个关键字 private
private:私有的。可以修饰成员变量和成员方法。
注意:被private修饰的成员只能在本类中访问。
其实我讲到现在讲解的是一个封装的思想。
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
3、封装和private的应用:
A:把成员变量用private修饰
B:提高对应的getXxx()和setXxx()方法
[代码]java代码:01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47class Student {
//姓名
private String name;
//年龄
private int age;
//姓名获取值
public String getName() {
return name;
}
//姓名设置值
public void setName(String n) {
name = n;
}
//年龄获取值
public int getAge() {
return age;
}
//年龄赋值
public void setAge(int a) {
age = a;
}
}
//测试类
class StudentTest {
public static void main(String[] args) {
//创建学生对象
Student s = new Student();
//使用成员变量
//错误:被私有修饰了,外界不能直接访问了
//System.out.println(s.name+"---"+s.age);
System.out.println(s.getName()+"---"+s.getAge());
//给成员变量赋值
//s.name = "林青霞";
//s.age = 27;
//通过方法给赋值
s.setName("林青霞");
s.setAge(27);
System.out.println(s.getName()+"---"+s.getAge());
}
}
4、this:是当前类的对象引用。简单的记,它就代表当前类的一个对象。
注意:谁调用这个方法,在该方法内部的this就代表谁。
this的场景:
解决局部变量隐藏成员变量
[代码]java代码:01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46class Student {
//姓名
private String name;
//年龄
private int age;
//姓名获取值
public String getName() {
return name; //这里其实是隐含了this
}
//姓名设置值
public void setName(String name) { //name = "林青霞";
//name = name; //变量的使用规则:就近原则
//这里是类名,目前还没有说过类似的用法,所以这个是有问题的
//这里的调用只能通过对象名
//这个对象如果存在,它应该代表的是Student的一个对象。
//那么,谁能够代表当前类的对象呢? java就提供了一个关键字 this
//Student.name = name;
this.name = name;
}
//年龄获取值
public int getAge() {
return age;
}
//年龄赋值
public void setAge(int age) {
this.age = age;
}
}
//测试类
class StudentTest {
public static void main(String[] args) {
//创建学生对象
Student s = new Student();
//给成员变量赋值
s.setName("林青霞");
s.setAge(27);
//获取数据
System.out.println(s.getName()+"---"+s.getAge());
}
}
Java私有方法运用场景_java6-3 封装和private关键字相关推荐
- python私有方法应用场景_Python 私有属性和私有方法应用场景分析
类的私有属性和方法 Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的public,private 关键字来区分私有公有. Python ...
- 面向对象、封装、private关键字、set和get方法、this关键字、构造方法、API
文章目录 1. 类和对象 1.1 面向对象和面向过程编程思想 面向过程编程思想 面向对象编程思想 举例对比2种编程思想 1.2 类的概述 类的概述 类的组成 举例 小结 1.3 对象的概述 对象的概念 ...
- 面向对象(封装对象private关键字)
1.面向对象(封装的概述) A:封装概述 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. B:封装好处 隐藏实现细节,提供公共的访问方式 提高了代码的复用性 提高安全性. C:封装原则 将不需 ...
- python私有方法应用场景_Python私有属性私有方法应用实例解析
01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私有方法 就是 对象 ...
- Java私有方法解释_java接口中 定义 private 私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
- java私有方法单元测试_如何通过java反射的方式对java私有方法进行单元测试
待测试的私有方法: import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.ann ...
- java私有方法_如何调用私有方法
当不涉及到用户隐私的时候,我们调用私有方法一般都没有什么问题. 在我们调用私有方法之前,我们必须要先知道你想调用的对象有哪些私有方法,和需要参数的那些方法的参数类型,和返回值的类型是多少. 查看私有方 ...
- Java面向对象思想、类的定义、对象的使用、对象内存图、成员变量和局部变量的区别、封装、private关键字、this关键字、构造方法、JavaBean-day06
目录 第1节 面向对象思想 1.1 面向对象思想概述 概述 举例 特点 1.2 类和对象 什么是对象 类与对象的关系 1.3 类的定义 事物与类的对比 类的定义格式 1.4 对象的使用 对象的使用格式 ...
- java中接口私有反方_接口中的Java 9私有方法
java中接口私有反方 Java 9 has been released and there has been a lot of changes. Today we will look into Ja ...
最新文章
- [转]在C#中使用API回调函数的方法
- HTML 杨辉三角,杨辉三角 - 哼哼哈嘿 - OSCHINA - 中文开源技术交流社区
- YoloV5 最强剪枝技术 模型压缩,3ms推理的YoloV5mAP60
- FoveaBox 超越anchor based检测框架
- 深入单例模式 java,深入单例模式四
- Linux 内核打印级别
- yolo极大抑制_pytorch实现yolov3(4) 非极大值抑制nms
- 视频质量检测中的TP、FP、Reacll、Precision
- 今天maven install时碰到的两个问题(堆溢出和编译错误)
- ubuntu18.04多版本opencv
- 吴恩达新公司曝光:签下富士康,要用AI变革制造业
- ios系统框架一: Core Animation
- 【数据蒋堂】报表应用的三层结构
- Laravel 项目使用 Carbon 人性化显示文章发表时间
- 腾讯云轻量应用服务器(免费内测)开箱测评
- 利用谷歌安全令牌(google authenticator)为服务器ssh添加二次验证功能
- 在Mac的“邮件”中创建和使用电子邮件签名使用教程
- 女神找我帮忙--图片转成手绘,该不该答应?
- VUE + CSS画三角形
- QNX系统终端中同一个进程号显示多次
热门文章
- JavaScript | 数组的常用属性和方法
- celery的中文_celery异步任务框架
- wpf中groupbox有什么用_展示设计中的标摊是什么 用的什么材料
- python定义了函数却显示未定义_python
- OkHttp透明压缩,收获性能10倍,外加故障一枚
- 图解面试题:找出数组中重复的数字?
- 50种Java编程技巧,越早知道越好!(建议收藏)
- C# Winform 窗体美化(一、IrisSkin 换肤库)
- mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现
- C#利用反射将Datatable转化为指定实体类ListT