黑马程序员_面向对象(1)

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------

        今天学习了面向对象,面向对象相对于其那面学习的编程来说是一种新的编程思想,我们前面学习的编程是面向过程的编程。

        面向对象的思想特点:

        更符合我们思考问题的方式。

        把复杂的问题简单化。

        把执行者变成了指挥者。

        面向对象的核心就是对象,为了在程序中创建对象,就要定义一个类,类是将具体的事物抽象,将具体事物的一些特性封装起来,形成一个类,通过类创建具体的对象。

        那么如何将具体事物抽象成一个类?

        将具体的事物进行分析,分析事物有哪些外在的特征,有哪些内在的行为,将这些分析出来的特性通过编程语言进行描述。

        在将事物抽象成类的过程中,把事物的外在特征定义成类的成员变量,把事物的内在行为定义成类的成员方法。

        例如:将手机抽象成一个类

/*
对手机进行分析:
手机的具体事物:
手机的外在特征:颜色,品牌
手机的内在行为:打电话,发信息

将手机的具体事务转成java类:
Phone
    成员变量:color,brant
   类的成员方法:call(),sendMessage()




*/
class Phone {
    //品牌
    String brant;
    //颜色
    String color;

    //打电话的方法
    public void call(String name) {
       System.out.println("给"+ name + "打电话"); 

    }
    
    //发信息的方法
    public void sendMessage(String neme) {
        System.out.println("给" + name + "发信息");
    }

}

 这就是把现实世界中的具体事物抽象成一个java类,用编程语言描述出来。

        匿名对象:

        匿名对象就是没有名字的对象,是在对抽象出来的类进行调用的时候用到的一种方法,这种方法使用的前提是对象只调用一次,或者是把对象作为实际参数进行传递。

        在类中有成员变量和局部变量,如何区分局部变量和成员变量对于我这个初学者来说真心是很不容易的,分了好久才把这两个的区分弄出来。

        局部变量:在类中的位置是在方法中或者方法的参数列表中,在内存中的位置是在栈内存中的,由于它是在方法中,所以它的生命周期是随着方法的调用而创建,随着方法调用完毕而消失,它在创建的过程中没有默认的初始化值。

        成员变量:在类中的位置是在类中方法外面,在内存中的位置是在堆内存中,它的生命周期是随着对象的建立而创建的,随着对象的消失而消失的,由于他存在与堆内存中,它在创建的过程中有默认的初始化值。

        在判断一个变量该不该定义为成员变量的时候应该判断这个变量是不是该类的特有属性,如果是就定义为成员变量,例如上面定义的类中的颜色和品牌,是手机的特有属性,就将他们定义为成员变量;如果不是类的特有属性,就不用定义成类的特有属性,例如定义一个用于比较两个数大小的类,这个类里边的变量就是两个int类型的数,这不是类的特有属性,就不用定义成类的成员变量,定义成局部变量就可以。

        在创建对象对对象进行初始化的过程中,有时输入的值不符合实际但是因为数据类型等都符合规定,程序也会运行,但是运行的结果却不是想要的,但是又不能在成员变量上对输入的值进行判断。那么,这时候就要对对象进行封装,也就是把实现的细节隐藏起来,只对外提供访问的方法,在方法中对输入的值进行校验,这样就可以解决在给变量进行复制的过程中出现变量的值不符合实际的问题。

        在进行封装的时候要用到关键字private,这是一个权限修饰符,它修饰的变量是私有的,只能在它所在的类中被访问,这样的话在类的外部就不能访问这个成员变量,只能在本类中进行访问。这里还要用到this关键字,因为在对对象复制的过程中可能会遇到成员变量名和局部变量名一样的情况,那么这时就会出现在复制的过程中把值赋给了局部变量而不是成员变量,为了解决这一问题,java提供了this关键字,this代表的是类的引用对象,也就是说那个对象在调用当前的方法,this就代表那个对象。

        例如:

 //写一个抽象类
class Person {
    private String name;    //通过private将成员变量私有化
    private int age;
    
    public void setName(String name) {    //通过public对外提供访问权限
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    public void setAge(int age) {
       if(age < 0) {
           System.out.println("非法的年龄值");    //对输入的数据进行校验
       }else {
            this.age = age;
       }

    }
    
    public int getAge() {
        return age;
    }
    
    public void show() {
        System.out.println("我叫" + name + "我的年龄是" + age);
    }
}
//写一个测试类
class PersonDemo {
    public static void main(String[] args) {
        Person p = new Person();    //创建一个对象
        
       //对成员变量赋值
        p.setName = "张盼";
        p.setAge = 24;
        
        p.show();
    }
}

        上面这段代码就是应用了面向对象,对Person类进行了封装,将成员变量通过private私有化,对外提供访问权限,在类的内部对输入的数据进行校验。

 

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------详细请查看:<a href="http://www.itheima.com" target="blank">www.itheima.com</a>

 

        

  

       

转载于:https://my.oschina.net/u/1390204/blog/283712

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值