黑马程序员Java培训、Android培训-Java 学习过程记录_面向对象上

1理解面向对象的概念

面向过程

       在一个结构体中定义窗口的大小,位置,颜色,背景等属性,对窗口操作的函数与窗口本身的定义没有任何关系,是谓语与宾语的关系

面向对象

     定义窗口时,除指定在面向过程中规定的属性,如大小,位置,颜色,背景等外,还要指定该窗口可能具有的动作 ,如隐藏,移动,最小化等。这些函数被调用时,都是以某个窗口要隐藏,某个窗口要移动的语法格式来使用的,是主语与谓语的关系。

面向对象的三大特征:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)

 2类与对象

类是对某一类事物的描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)

如果将对象比作汽车,那么类就是汽车的设计图纸。所以面向对象程序设计的重点是类的设计,而不是对象的设计。

3类的定义

class Person

{

       int age;

       void shout()

       {

              System.out.println(oh,my god! I am + age);

       }

}

age是类的属性 ,也叫类成员变量

shout是方法也叫类的成员函数。

shout方法可以直接访问同一个类中的age变量 ,如果一个方法中有与成员变量同名的局部变量,该方法中对这个变量名的访问是局部变量,而不再是成员变量。 

4对象的产生和使用

产生:

Person p1 = new Person();

执行后,为类Person的引用变量 p1在堆中申请由p1标识的内存对象,并初始化,引用变量p1指向对内这个对象的首地址,通过调用p1来使用这个对象;

使用:

创建新的对象之后,我们就可以使用对象名.对象成员 的格式,来访问对象的成员(包括属性和方法)

6对象的生命周期 

没有任何引用变量指向对象,这个对象就会被当做垃圾,

离开作用域p1失效,其标识的Person对象也就成为了垃圾;

p1=null后,p1不能指向对象,其标识的Person对象也就成为了垃圾;

7对象的比较

“==”运算符与equals()方法的区别

“==”运算符引用类型变量的值是否相同

equals()方法用于比较两个变量指向的两个对象中的内容是否完全一样。

比较两个数组对象的内容是否相等,使用Arrays.equals(int[],int[])方法

8匿名对象

我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象, 如:new Person().shout();

如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。

我们经常将匿名对象作为实参传递给一个函数调用。

9实现类的封装性

在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。不能被外部随意修改。

我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。

n         一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。

10类的封装所带来的优点

隐藏类的实现细节;让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;

编程试验:我们在一个类中定义了一个private类型的成员变量,接着产生了这个类的两个实例对象,请问第一个对象的方法中,能否以第二个对象.成员的格式访问第二个对象中的那个private成员变量? 结果:不能。

今天实验代码:

class Person

{

       private int age;                                   //成员变量;

       void shout()

       {

              int age=60;                   //该局部变量会将外部成员变量隐藏;可访问私有成员;

              System.out.println("my age is"+age);

       }

       public static void main(String [] args)          //放在哪个类中都没有关系;

       {

              Person p1=new Person();

              Person p2=new Person();

              p1.age=-30;                         //能访问内部私有成员;                         

              p1.shout();                          //单独实例化;

              p2.shout();                          //初始化后的值;

              //getSomeOne(new Person());

       }

}

class TestPerson

{

       public static void main(String [] args)   //放在哪个类中都没有关系;

       {

              Person p1=new Person();

              Person p2=new Person();

              //p1.age=-30;                       //不能访问Person内部私有成员变量;                 

              p1.shout();                          //单独实例化;

              p2.shout();                          //初始化后的值;        

              /*String str1=new String("abc");

              String str2=new String("abc");

              String str3=str1;

              if(str1==str2)                       //比较栈中的内容,所以打印出来的是false

                     System.out.println("true");

              else

                     System.out.println("false");

 

              if(str1==str3)                       //同样的内容,所以打印出来的就是true

                     System.out.println("true");

              else

                     System.out.println("false");

 

              if(str1.equals(str2))                     //比较的是堆中两个内容,所以打印出来的是true                      

                     System.out.println("true");

              else

                     System.out.println("false");

 

              new Person().shout(); */             //产生对象时候,不产生对象名称,直接使用对象;适用于对象只调用一次;

              getSomeOne(new Person());

       }

       public static void getSomeOne(Person p)

       {

              p.shout();

       }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值