您的位置:首页 > 编程语言 > Java开发

JAVA 基础(面向对象)

2015-08-10 20:28 232 查看
1、面向对象

把大象装进冰箱的例子,冰箱就是对象;冰箱.打开,冰箱.存储,冰箱.关闭。

面向对象特征:封装,继承,多态。

开发:找对象,建对象,用对象。以及维护对象之间的关系。

类和对象的关系:

类就是现实生活中的事物的描述。是对具体对象的抽象。

对象就是这类事物实实在在存在的个体。

映射到Java中,描述就是class定义的类。具体对象就是对应Java在堆内存中的实体。

定义类,就是描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法);

属性对应的是类中变量,行为对应的是类中的函数();

先创建一个car类,用new建立对象

Car c=new  Car();       //创建一个c变量,c是类类型变量。

类类型变量,是一种引用型变量,就是把一个变量指向一个对象,具体的实体。

成员变量和局部变量:

作用范围:成员变量作用于整个类中。局部变量作用于函数中,或者语句中。

内存中的位置:成员变量在堆内存中,因为对象的存在,才在内存中存在。局部变量存在栈内存中。

匿名对象:

匿名对象是对象的简化形式

匿名对象两种使用情况:①、当对象方法仅进行一次调用时(调用属性没意义),如果对一个对象进行多个成员调用,必须给这个对象起个名字。

②、匿名对象可以作为实际参数进行传递

2、封装

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

优点:将变化隔离;便于使用;提高重用性;提高安全性。

封装原则:①、将不需要对外提供的内容都隐藏起来。

             ②、把属性都隐藏,提供公共方法对其访问。

private关键字:私有,权限修饰符;用于修饰类中的成员(成员变量,成员函数)。私有变量只在本类中有效。

将变量私有化以后,类以外即使建立了对象也不能直接访问,对外提供对应的set、get方法对其进行访问,提高对数据访问的安全性。

一个成员变量,通常对应两个访问方式。一个获取,一个输出。

注意:私有仅仅是封装的一种表现形式。

之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作。提高代码的健壮性。

3、构造函数

特点:函数名与类名相同;不要定义返回值类型;不可以写return语句;

作用:给对象进行初始化(对象一建立就会调用与之对应的构造函数)

注意:默认构造函数的特点;(当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数;当在类中自定义了构造函数后,默认的构造函数就没有了)

多个构造函数是以重载的形式存在的。

构造函数与一般函数的区别:

①、 格式不同

②、 运行上不同:构造函数是在对象一建立就运行,给对象初始化;而一般方法是对象调用才执行,给对象添加对象具备的功能。

③、 一个对象建立,构造函数只运行一次(再运行构造函数,要重新建立一个新对象),而一般方法可以被该对象调用多次。

什么时候定义构造函数?

答:当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

构造代码块:对象一建立就运行,而且优先于构造函数执行。

作用:给对象进行初始化。

构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。

构造代码块中定义的是不同对象共性的初始化内容。

关键字this:区分成员变量和局部变量(变量出现同名时,一定要用this区分)

this代表它所在函数所属对象的引用,简单说,哪个对象在调用this所以的函数,this就代表哪个对象。

同一个类中,成员变量之间的调用,实际都是不同对象的调用。

this的应用:当定义类中功能时,该函数内部要用到该函数的对象时,这时用this来表示这个对象。但凡本类功能内部使用了本类对象,都有this表示。

构造函数间的调用要用this语句调用【this(参数);】,而不可以用普通的:【函数名();】

一般函数,不能调用构造函数。因为this语句只能用于构造函数间。

this语句只能定义在构造函数中的第一行。因为初始化动作要先执行。

Day51.java

/*

面向对象/封装private

*/

class Person

{

      

       privateint age;      //定义一个私有的age变量,把它的属性封装

       publicvoid setAge(int a)    //在set方法中对输入的age值进行逻辑判断

       {

              if(a>0 && a<130)

              {

                     age=a;

                     speak();

              }

              else

                     System.out.println("feifaage");

       }

       publicint getAge()     //get方法

       {

              return age;

       }

       voidspeak()

       {

              System.out.println("age="+age);

       }

      

}

class Day51

{

       publicstatic void main(String[] args)

       {

              Person p=new Person();    //创建类Person的p对象

              p.setAge(-30);  //a赋值给的是对象p中的age,不是私有的那个age

              //p.age(20);

              //p.speak(20);

       }

}

Day52.java

/*

构造函数

函数的重载以及与一般函数的区别

*/

class Person

{

       privateString name;

       privateint age;

       /*

         构造代码块

          因为对象都具有cry()的功能

       */

       {

              System.out.println("person coderun");

              cry();

       }

       Person()

       {

              System.out.println("A:name="+name+",,,,age="+age);

              //cry();  方法中的,只有在创建对象时调用一次

       }

       Person(Stringa)     //函数的重载

       {

              name=a;

              System.out.println("B:name="+name+",,,,age="+age);

       }

       Person(Stringa,int b)

       {

              name=a;

              age=b;

              System.out.println("C:name="+name+",,,,age="+age);

       }

       publicstatic void cry()   

       {

              System.out.println("cry!!!!!!!");

       }

}

class Day52

{

       publ
4000
icstatic void main(String[] args)

       {

              Person p1=new Person();

              //p1.cry();        对象p1可以多次调用cry()这个功能

              Person p4=new Person();         //每次创建,都是一个新的对象,且对象名不可相同

              Person p2=newPerson("KAI");   //根据方法中定义的参数的个数和类型,调用对应的函数

              Person p3=new Person("LAI",17);

             

       }

}

Day53.java

/*

关键字this的应用

*/

class Person

{

       privateint age;

       privateString name;

       Person(intage)     //为了变量读的有意义,局部变量与成员变量同名,此时,用this区分

       {

              this.age=age;

              //System.out.println("age="+age);

       }

       Person(Stringname,int age)

       {

              this.name=name;

              this.age=age;

             

       }

       publicvoid speak()

       {

              System.out.println("A:name="+name+",,,,age="+age);

       }

 

/*

 判断两个人,是否是同龄人

 

*/

       publicboolean compare(Person p)    //只需传一个人的属性就可以进行比较,所以不可以定义两个person

                                          //p2是参与比较的对象,所以,p2的age传给了这里的p

       {

              return this.age==age;      //this.age代表的就是p1的age

                                          //也可以用if语句。赋值“==”本来就具有判断的功能,这样更简便

       }

 

}

class Day53

{

      

      

      

       publicstatic void main(String[] args)

       {

              Person p1=new Person(21);

              //p.speak();

              Person p2=new Person(20);

              boolean b=p1.compare(p2);      //p1调用了compare()函数

              System.out.println(b);

             

              /*Person p1=newPerson("kai",21);

              p1.speak();*/

       }

}

Day54.java

/*

this关键字在构造函数间的调用

*/

class Person

{

       privateString name;

       privateint age;

       Person(Stringname)

       {

              this.name=name;

              speak();

       }

       Person(Stringname,int age)

       {

              this(name);       //调用了Person(String name)

              this.age=age;

              speak();

       }

       publicvoid speak()

       {

              System.out.println("A:name="+name+",,,,age="+age);

       }

}

class Day54

{

      

       publicstatic void main(String[] args)

       {

              Person p=new Person("kai",29);

              //Person p1=new Person("lei");

             

       }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 语言