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方法的更多相关文章

  1. 廖雪峰Java2面向对象编程-2数据封装-1方法重载

    方法重载 方法重载Overload是指:多个方法的方法名相同,但各自的参数不同 参数的个数不同 参数的类型不同 参数位置不同 方法返回值类型通常都是相同的 目的:相同功能的方法使用同一名字,便于调用 ...

  2. 廖雪峰Java2面向对象编程-1面向对象-1面向对象基础

    1.对象的概念 面向对象编程:Object-Oriented Programming 对现实世界建立计算机模型的一种编程方法. 现实世界 计算机模型 Java代码 人 类/class class Pe ...

  3. 廖雪峰Java2面向对象编程-3继承和多态-1继承

    1.继承 继承是一种代码复用的方式. Student与Person有相同部分的代码. Student可以从Person继承,这样Student获得了Person的所有功能,只需要编写新增的功能即可.通 ...

  4. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...

  5. 廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类

    每个子类都可以覆写父类的方法 如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误 如果去掉父类的方法,就失去了多态的特性 可以把父类的方法声明为抽象方法. 如果一个class定义了方 ...

  6. 廖雪峰Java2面向对象编程-6Java核心类-6常用工具类

    1.Math Math提供了数学计算的静态方法 序号 方法 描述 1 abs() 返回参数的绝对值.Math.abs(-9)//9 2 ceil() 返回大于等于( >= )给定参数的的最小整数 ...

  7. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday { //定义int常量 public static final int SUN = 0; public static final int MON ...

  8. 廖雪峰Java2面向对象编程-6Java核心类-4JavaBean

    1.JavaBean定义 符合以下命名规范的class被成为JavaBean private 类型的field 针对这个field的get和set方法 public class Person { pr ...

  9. 廖雪峰Java2面向对象编程-6Java核心类-3包装类型

    Java的数据类型: 基本类型:int boolean float 引用类型:所有class类型 为一个基本类型int赋值为null,会提示"incompatible types" ...

随机推荐

  1. UV纹理+修改器:VertexWeightEdit+修改器:Mask遮罩

    UV纹理+修改器: VertexWeightEdit+修改器: Mask遮罩 基本流程, 如下图,准备地图一份, 黑白色即可. 纹理使用颜色绘制权重. 白色为1, 黑色为0. 新增球体, 细分多次, ...

  2. ODOO v10.0 自动生成财务凭证的科目设置

    ODOO v10.0 自动生成财务凭证的科目设置 可以在产品类别及产品档案里设置,建议在产品类别下设置,方便维护. 项目 设置为(具体科目以公司科目表为主) 对应作用业务 Income Account ...

  3. stack 的一些用法

    #include<bits/stdc++.h> using namespace std; int32_t main() { stack<int> st; st.push(); ...

  4. 《DSP using MATLAB》Problem 5.36

    第1小题 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  5. hdu3488 Tour 拆点+二分图最佳匹配

    In the kingdom of Henryy, there are N (2 <= N <= 200) cities, with M (M <= 30000) one-way r ...

  6. ElasticSearch安装部署,基本配置(Ubuntu14.04)

    ElasticSearch部署文档(Ubuntu 14.04) 安装java sudo add-apt-repository ppa:webupd8team/java sudo apt-get upd ...

  7. linux忘记root密码

    在选择系统界面选中要修改的系统(我的就是默认的第一个),按e建进入修改,在修改界面一直下到文件末尾,在末尾前一行左右,找到UTF-8那一行,在这一行敲一个空格,然后打init=/bin/sh 修改完成 ...

  8. Delphi中Json格式读写

    Json是一种轻量级传输数据格式,广泛应用互联网和各应用中.json主要採用键值对来表示数据项.多个数据项之间用逗号分隔,也能够用于数组.以下注重介绍一下在delphi中使用json,在delphi中 ...

  9. 深入详解美团点评CAT跨语言服务监控(五)配置与数据库操作

    CAT配置 在CAT中,有非常多的配置去指导监控的行为,每个配置都有相应的配置管理类来管理,都有一个配置名, 配置在数据库或者配置文件中都是以xml格式存储,在运行时会被解析到具体实体类存储.我们选取 ...

  10. Hi3516CV300 sample -> region