zoukankan      html  css  js  c++  java
  • day05 encapsulation

    day05

    2020年2月6日

    封装性在java的体现

    • 方法就是一种封装
    • 关键字private也是一种封装

    封装就是将一些细节信息隐藏起来,对外界不可见。

    属性隐藏起来,如果需要访问某个属性,提供公共方法对其访问

    封装的步骤

    1. private关键字来修饰变量
    2. 对于需要访问的成员变量,提供一对getXxx方法、setXxx方法。

    private关键字

    private使用格式

    private 数据类型 变量名

    /*
    问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来。
    解决方案:用private关键字将需要保护的成员变量进行修饰。
    
    一旦使用private进行修饰,那么本类当中仍可以随意访问。
    但是超出本类就不能在直接访问了
    
    间接访问private成员变量,就是定义一对setter/getter方法
    对于getter来说,不能有参数,返回值类型与成员变量相对应
    对于布尔类型的成员变量,函数名为isXxx而不是getXxx
    对于setter来说,不能有返回值,参数类型和成员变量对应
     */
    public class Person {
        String name;
        private int age;
        public void show(){
            System.out.println("my name is "+name+"年龄是"+age);
        }
        //这个成员方法,专门用于向age设置数据
        public void setAge(int num){
            if(num<100&&num>=9)
            {
                age=num;
            }
            else {
                System.out.println("数据不合理!");
            }
        }
        //这个成员方法,专门用于获取age的数值
        public int getAge(){
            return age;
        }
    }
    public class Demo03Person {
        public static void main(String[] args) {
            Person person=new Person();
            person.show();
            person.name="Jam";
    //        person.age=-20; 直接访问private内容,错误写法
            person.setAge(-20);
            person.show();
        }
    }
    

    封装优化1——this关键字

    this代表所在类的当前对象的引用(地址值),即对象自己的引用。

    /*
    当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。
    如果需要访问本类当中的成员变量,使用格式;
    this.成员变量名
    “通过谁调用的方法,谁就是this”
     */
    public class Person {
        String name;
        //参数变量who是对方的名字
        //成员变量name是自己的名字
        public void sayHello(String name){
            System.out.println(name+",你好.我是"+this.name);
            System.out.println(this);
        }
    }
    public class Demo01Person {
        public static void main(String[] args) {
            Person person=new Person();
            person.name="Tom";
            person.sayHello("Tony");
            System.out.println(person);//地址值
        }
    }
    

    封装优化2——构造方法

    当一个对象被创建时,构造方法用来初始化该对象,给对象的成员变量赋初值

    所有类都有构造方法,因为java自动提供了一个无参数构造方法,一旦自己定义了构造方法,java自动提供的默认无参数构造方法就会失效。

    构造方法的定义格式

    构造方法的写法上,方法名与它所在的类名相同。它没有返回值,所以不需要返回值类型,甚至不需要void。

    构造方法是可以重载的,既可以定义参数,也可以不定义参数。

    修饰符 构造方法名(参数列表){
    	//方法体
    }
    
    /*
    构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法
    格式:
    public 类名称(参数类型 参数名称,参数类型 参数名称){
        方法体
    }
    注意事项
    1.构造方法的名称必须和所在的类名称完全一样,大小写也要一样
    2.构造方法不要写返回值类型,连void都不写
    3.构造方法不能return一个具体的返回值
    4.如果没有编写任何构造方法,那么编译器会默认创造一个构造方法,没有参数、方法体什么事都不做
    public Student(){}
    5.一旦编写了至少一个构造方法,那么编译器将不再赠送
    6.构造方法也是可以进行重载的。
    重载:方法名称相同,参数列表不同
     */
    public class Student {
        //成员变量
        private String name;
        private int age;
    
        //无参构造方法
        public Student(){
            System.out.println("无参构造方法执行啦");
        }
    
        //全参构造方法
        public Student(String name,int age){
            System.out.println("全参构造方法执行啦");
            this.name=name;
            this.age=age;
        }
    
        //Getter Setter
        public void setName(String name){
            this.name=name;
        }
    
        public void setAge(int age){
            this.age=age;
        }
    
        public String getName() {
            return name;
        }
    
        public int getAge() {
            return age;
        }
    }
    
    public class Demo02Student {
        public static void main(String[] args) {
            Student stu1=new Student();
            Student stu2=new Student("lili",20);
            System.out.println("姓名"+stu2.getName()+"年龄"+stu2.getAge());
            //如果需要改变对象当中成员变量数据内容,仍然需要使用setXxx方法
            stu2.setAge(21);
            System.out.println(stu2.getAge());
        }
    }
    

    标准代码——JavaBean

    JavaBean是java语言编写类的一种标准规范。符合JavaBean的类,要求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变量的setget方法。

    自动编写setget方法:code->generate(快捷键Alt+Insert)->getter and setter

    自动编写构造函数:code->generate(快捷键Alt+Insert)->constructor->select none(无参数)

    /*
    一个标准的类通常需要拥有以下四个组成部分:
    1.所有的成员变量都要使用private关键字修饰
    2.为每一个成员变量编写一对Getter/Setter
    3.编写一个无参数的构造方法
    4.编写一个无参数的构造方法
    
    这样标准的类也叫做Java Bean
     */
    public class Student {
    

    编写符合JavaBean规范的类,以学生类为例

    public class Student {
        //成员变量
        private String name;
        private int age;
    
        //构造方法
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        //成员方法
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    测试类,代码如下:

    public class demo01Student {
        public static void main(String[] args) {
            Student stu1=new Student();
            stu1.setName("小明");
            stu1.setAge(20);
            System.out.println("name is"+stu1.getName()+"age is "+stu1.getAge());
            System.out.println("=========");
    
            Student stu2=new Student("小红",18);
            System.out.println("name is"+stu2.getName()+"age is "+stu2.getAge());
            stu2.setAge(19);
            System.out.println("name is"+stu2.getName()+"age is "+stu2.getAge());
        }
    }
    
  • 相关阅读:
    【转】Linux Nginx负载均衡【精】
    网上找的模拟POST提交上传图片类
    (原)二、CentOS Linux 下配制Nginx实现简单的负载均衡配置
    (原)一、CenOS Linux安装nginx
    IOS上传图片方法类
    Objectivec和Java下DES加密解密保持一致
    ubuntu 10.10下面添加samba实现和windows共享文件
    几道位移运算题
    jQuery event(下)
    jQuery ajax —— Baidu ajax
  • 原文地址:https://www.cnblogs.com/ningdeblog/p/12271196.html
Copyright © 2011-2022 走看看