封装概念

2017-06-30

  1. 函数即是最小的封装单位
  2. 封装就是避免对于类属性的直接访问,通过提供对外的方法,然后操作传入的数据,提高代码健壮性
  3. 构造代码块执行优先于构造函数,定义的是不同对象共性的初始化内容。

  4. 下面的代码,输出的name会是null,因为java并不会把”小李子”这个值赋给堆内存中p的name,它认为两个name是同一个局部变量name。

    class Person {
        private String name;
        Person(String name) {
            name = name;   //java认为是同一个局部变量name
            System.out.println("name" + name);
        }
    }
    
    calss PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("小李子");
        }
    }

    下面把局部变量name换成n,是可以的。因为java编译的时候,在Person方法中找不到name,就会往上在类里面找到成员变量name。 但是n这个变量定义的没有语义,不知道它是用来干嘛的。

    class Person {
        private String name;
        Person(String n) {
            name = n;  
            System.out.println("name" + name);
        }
    }
    
    calss PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("小李子");
        }
    }
  5. 因此,变量出现重名情况时候,this关键字解决了这个问题。this代表了所在函数的所在对象的引用,哪个对象在调用this所在的函数,this就代表哪个对象。其实调用的时候,都是通过this完成的,因为自始至终都是对象在运行,通过this才能知道操作的是哪一个对象,才能知道操作的是哪一个对象的哪一个属性或者方法。在类中的大部分时候,this关键字是被省略的。

    class Person {
        private String name;
        Person(String name) {
            this.name = name;   
            System.out.println("name" + this.name); //这里其实省略了this
        }
    }

    本类对象中定义的方法,如果需要调用本类对象,那么就需要this关键字来创建一个指向后期调用该方法的对象的引用。比如下面compare的方法比较p1和p2的两个是否同龄

    class Person{
        private int age;
        Person(int age) {
            this.age = age;
        }
        public boolean compare(Person p) {
            return this.age==p.age;
            }
    }
    
    class PersonDemo{
         public static void main (String[] args){
            Person p1 = new Person(20);
            Person p2 = new Person(30);
            boolean b = p1.compare(p2);
            System.out.println(b);          
        }           
    }
  6. 构造函数可能对外只提供了一个,但是类的内部存在很多初始化的构造方法,彼此间调用。构造函数间互相调用,只能用this关键字。并且,this关键字的调用只能放在构造函数中的的第一个语句。

    class Person {
        private int agel
        private String name;
        Person (Stirng name) {
            this.name = name;
        }       
        Person (String name, int age) {
            this(name);  // this 后面是不加点的。属于构造函数间调用,且为第一个语句
            this.age = age;
            }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值