• 廖雪峰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方法

  • 相关阅读:
    2015/8/28 回校正常学习工作
    Asp.net自定义控件开发任我行(3)-Render
    Asp.net自定义控件开发任我行(2)-TagPrefix标签
    Asp.net自定义控件开发任我行(1)-笑傲江湖
    ET采集阿里妈妈淘宝客商品规则
    淘宝API还能用来采集数据吗?taobao.item.get 接口还能用吗?
    淘宝api升级,无法采集淘宝的数据,taobao.item.get 和taobao.taobaoke.items.get都不能用
    用firefox浏览器访问localhost,apache http server 已停止工作
    淘宝客网站怎么批量采集淘宝商品,方维采集淘宝数据思路
    方维购物分享系统怎么样,方维系统安全性检测
  • 原文地址:https://www.cnblogs.com/csj2018/p/10256597.html
Copyright © 2020-2023  润新知