廖雪峰Java2面向对象编程-2数据封装-1方法
1.数据封装
一个class可以包含多个field。直接把field用public暴露给外部可能破坏了封装,例如传入不合理的数值(年龄填入1000)。如下
public class Person {
public String name;
public int age;
}
2.class模版
用private修饰field可以拒绝外部访问
定义public方法可以间接修改field
使用封装可以在方法中对参数进行处理。如对name去除首尾的空格。
方法定义:
- 修饰符 public private
- 方法返回值:没有返回值用void
- 方法名称:首字母小写,后面的每个单词大写
- 方法参数列表:多个参数用逗号隔开
- 方法体:
* 方法返回值通过入return语句实现,没有返回值(void)可以省略return
* 方法内部可以使用隐式变量this:this指向当前实例,this.field可以访问当前实例的字段。
* 不引起歧义的情况下,可省略this。局部变量名优先原则
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name.trim(); //局部变量名优先,如果存在同名,不能省略
}
public String getName() {
return name; //return this.name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return this.age;
}
}
3.外部代码访问class
* 外部代码不可访问private字段
* 外部代码通过调用public方法间接设置和获取private字段
* public方法封装了数据访问
* 通过方法访问实例字段更安全
* 通过变量.方法名()来调用实例方法
public class Hello {
public static void main(String[] args) {
Person ming = new Person();
ming.setName("小明");
ming.setAge(12);
System.out.println(ming.getName());
System.out.println(ming.getAge());
}
}

4.参数绑定
更改模版类中方法的参数,实例传参无效,但也不会影响外部的变量值。没啥卵用,可忽略
Person.java
public class Person {
private String name;
private int age;
public void setName(String name) {
name =" 张三 ";
this.name = name.trim();
}
public String getName() {
return this.name;
}
public void setAge(int age) {
age = 60;
this.age = age;
}
public int getAge() {
return this.age;
}
}
Hello.java
public class Hello {
public static void main(String[] args) {
Person ming = new Person();
String s = "小明";
int i = 12;
ming.setName(s);
ming.setAge(i);
System.out.println("实例变量ming.getName():"+ming.getName());
System.out.println("实例变量ming.getAge():"+ming.getAge());
System.out.println("外部变量s:"+s);
System.out.println("外部变量i:"+i);
}
}

5.定义private方法
如果public方法有重复的部分,可以定义private方法提高代码复用性。
类中private方法只能由类的public方法调用,实例不能直接调用。
Person.java
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name.trim();
}
private String getName() {
return this.name;
}
public void setAge(int age) {
this.age = age;
}
private int getAge() {
return this.age;
}
private int getBirth() {
return calcBirth(2019);
}
private int calcBirth(int currentYear) {
return currentYear - age;
}
public void info() {
System.out.printf("我是%s,我出生于%d年,今年%d岁" ,name, getBirth(),age);
}
}
Hello.java
public class Hello {
public static void main(String[] args) {
Person ming = new Person();
ming.setName(" 小明 ");
ming.setAge(16);
ming.info();
}
}

6.总结:
方法可以让外部代码安全地访问实例字段
方法是一组执行语句
方法内部遇到return时返回
void表示不返回任何值(注意和返回null不同)
外部代码通过public方法操作实例
内部代码可以调用private方法
廖雪峰Java2面向对象编程-2数据封装-1方法的更多相关文章
- 廖雪峰Java2面向对象编程-2数据封装-1方法重载
方法重载 方法重载Overload是指:多个方法的方法名相同,但各自的参数不同 参数的个数不同 参数的类型不同 参数位置不同 方法返回值类型通常都是相同的 目的:相同功能的方法使用同一名字,便于调用 ...
- 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础
1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...
- 廖雪峰Java2面向对象编程-3继承和多态-1继承
1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-2接口
1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...
- 廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类
每个子类都可以覆写父类的方法 如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误 如果去掉父类的方法,就失去了多态的特性 可以把父类的方法声明为抽象方法. 如果一个class定义了方 ...
- 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类
1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...
- 廖雪峰Java2面向对象编程-6Java核心类-5枚举类
直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...
- 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean
1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...
- 廖雪峰Java2面向对象编程-6Java核心类-3包装类型
Java的数据类型: 基本类型:int boolean float 引用类型:所有class类型 为一个基本类型int赋值为null,会提示"incompatible types" ...
随机推荐
- 一天掌握python爬虫
一天掌握python爬虫日记: (小爬虫,NO 我们是大蜘蛛 ) 数据抓取: requests:requests 的底层实现其实就是 urllib开源地址:https://github.com/ken ...
- hdu4998 Rotate 计算几何
Noting is more interesting than rotation! Your little sister likes to rotate things. To put it easie ...
- centos7虚拟机安装elasticsearch5.0.x-安装篇
https://blog.csdn.net/u012371450/article/details/51776505 请预先安装jdk 创建新用户(非root用户)elasticsearch只能用非ro ...
- 【mybatis源码学习】mybtias扩展点
[1]org.apache.ibatis.reflection.ReflectorFactory 该扩展点,主要是对javaBean对象,进行反射操作. org.apache.ibatis.refle ...
- LG4196 [CQOI2006]凸多边形
题意 题目描述 逆时针给出n个凸多边形的顶点坐标,求它们交的面积.例如n=2时,两个凸多边形如下图: 则相交部分的面积为5.233. 输入输出格式 输入格式: 第一行有一个整数n,表示凸多边形的个数, ...
- day4 java消息中间件服务
PS: 讲个故事,老王要给他的两个女儿讲故事,他要一个一个讲很费劲,后来他使用了微信公众号,让订阅微信公众号的人关注就减轻了负担. PS: 传统的如果一个用户进行登录,会调用分多的服务,如果没有消息中 ...
- 几个方便的nodejs 任务调度框架
摘录几个方便的nodejs 任务调度包 node-cron https://github.com/kelektiv/node-cron node-schedule https://github.com ...
- Zabbix-2.4-安装-3
zabbix自动注册简单介绍---创建自动注册的actions 怎么把1000台机器加zabbix里 zabbix提供了网络发现和自动注册2个功能,发现有机器连过来,给它加个模板 如果是win ...
- chmod修改权限
1.命令简介 chmod(Change mode) 用来将每个文件的模式更改为指定值.Linux/Unix 的档案调用权限分为三级 : 档案拥有者.群组.其他. u :目录或者文件的当前的用户 g : ...
- NoHttpResponseException
采用JMeter2.13做Http性能测试时,在高并发请求的情况下,服务器端并无异常,但是Jmeter端报错NoHttpResponseException (the target server fai ...