黑马程序员——java第五天:面向对象(类、对象、变量、封装、构造、this)

------- android培训java培训、期待与您交流! ---------- 

类与对象的关系:

面向对象三个特征:封装、继、多态

开发无非就是找对象用,没有对象就见对象再用,并维护对象之间的关系。

类与对象的关系

类就是对现实生活中事物的描述。对象就是这类事物,事实存在的个体。

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

class  c = new class();c为引用型变量,为类类型变量,类类型变量指向对象。

对象的特点在于封装数据。

成员变量和局部变量:

类、成员、实例、局部、静态、全局区别?

首先:类变量和静态变量是一回事,你可以认为是一个人的大名和小名。
之所以叫类变量是因为这类变量是随着类的加载而存在,随着类的释放而消失。
之所以叫静态变量可能是因为它前面是被static(静态的)所修饰。
第二:成员变量和实例变量也是一回事,你可以认为是一个人的大名和小名。
之所以叫成员变量是因为它作用范围是在这个类中,成员变量和局部变量是相对的。
之所以叫实例变量是因为它是随着对象(实例)的创建而存在,随着对象的消失而消失
局部变量是存在于函数中的变量,作用范围只在这个函数中有效。
还有至于你说的那个全局变量应是在C语言中的,在java中没有全局变量一说。

public class Car{

String color;//成员变量、实例变量

static int num;//静态变量、类变量

Car(){

num=4;

color="red";

}

public static void main(String args[]){

Car ca=new Car();

run(ca); 

}

static void run(Car a){

       int jubu=8;                       //局部变量

System.out.print(a.num+","+a.color+","+jubu);

}

}


 

作用域和在内存中的位置:

成员变量:作用于其所在的整个类中。在堆内存中,因为对象的存在,才在内存中存在。

局部变量:作用于函数和语句中。存在于栈内存中。

注意:如果有一个类,创建了这个类的两个对象a。用a调用这个类的属性并改变属性的值(a.属性=123;),其实在这个类中并没有改变它的值,只是改变了这个对象a在堆中创建的实体中的这个属性的值,准确的说就是改变的是这个对象属性的值。再创建这个类的另一个对象b。那么b.属性并不是被a所改变,还是原来类中定义的那个值。(把类看做是图纸,把对象看做根据图纸建造的建筑物。根据实际一栋建筑物改造并不影响另一栋建筑物按照图纸所建成型的样式。)。

匿名对象的应用:

例子:

class  car{

new car();//此就是创建的匿名对象。

}

匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。

如果对一个对象进行多个成员调用,必须给合格对象起个名字。

class demo1{

 /*static*/int a;//此处不可一是static类型的,因为static是放在方法内存中的,他是所有对象共享的。

 /*static*/ String b;

 void run(){

 System.out.print("a="+a+",b="+b);

 }

}

public class demo{

 public static void main(String[] args){

 new demo1().a=5;        

 new demo1().b="kess";  

 new demo1().run();

 }

}匿名对象使用方法二:可以将匿名对象作为实际参数进行传递。

例如:

publicclass Car{

intnum=4;

String color="red";

publicstaticvoid main(String args[]){

run(new Car());

}

staticvoid run(Car a){

    a.color="blue";

    a.num=5;

System.out.print(a.num+","+a.color);

}

}

封装概述:

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

好处:将变化隔离,便于使用,提高重用性,提高安全性。

封装原则:讲不需要对外提供的内容隐藏起来。(把属性都隐藏,提供公共方法供访问)

函数、类、包、等都是封装体,函数是最小的封装体。

修饰符:

public:公有,权限无限大;

private:私有,权限最小。

封装privateprivate仅仅为封装的一种表象形式)

private:私有修饰符。权限修饰符中的一种。用于修饰类中的成员(成员变量、成员方法),私有只有在本类中有效。

每个属性都可以被私有化,都可能有get方法和set方法。

成员私有化以后之所以对外提供访问方发,就是因为可以在访问方法中加入裸机判断等语句,对访问的数据进行操作,提高代码的健壮性。

构造函数:

当一个类没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。

如:class demo{

demo(){}    //如果没有构造函数系统默认的构造函数就是这样。

}

构造函数的特点1、函数名与类名相同。

                                     2、不用定义返回值类型。  //void也是一种返回值类型

                                     3、不可以写retrurn语句。

作用:给对象初始化。

注意:1可以有多个构造函数,他们是以方法的重载的形式存在的。

           2当对象已建立(class c=newclass();)就执行了与之对应的构造函数。和一般函数不同的是一般函数是对象调用才执行,给对象添加对象具备的功能。

           3一个对象建立,构造方法只运行一次,也就是说这个对象只初始化一次。而一般函数可以被调用多次。

什么时候定义构造函数?

        当分析事物时,该事物存在具备一些特征或者行为,那么将这些内容定义在构造方法中。

例子:轿车有四个轮子,红颜色。

publicclass Car{

intnum;

String color;

Car(){

num=4;

color="red";

}

publicstaticvoid main(String args[]){

Car ca=new Car();

run(ca);

}

staticvoid run(Car a){

System.out.print(a.num+","+a.color);

}

}

静态成员等程序运行完随着类的释放而释放。你再用其他主函数调用 run方法就会变成初始值了。

静态成员应该也是存储在堆内存的。

构造代码块:

class people{

{

   System.out.println(“你好”)//在这个代码块中的为构造代码块

}

public static void mainString[] args{

 

}

}

作用:给对象进行初始化,应有于所有只要建立的对象中(相当于对象的构造方法,只是他应用于所有对象),先于构造方法执行。对象已一建立就运行。

和构造方法的区别:构造代码块是给所有对象进行统一初始值,而构造方法是给对应的对象初始化(因为构造函数可以有几个(方法的重载形式存在))。

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

关键字——this

(在方法中,局部有用局部的属性,局部没有到成员里找。局部有的属性成员里也有,没有特殊说明用的就是局部的属性,要想用成员的属性就在属性前加this.this.属性))

this代表本类的对象(此对象为this所在函数所属对象的引用(也就是哪个对象调用this所在的方法,就代表哪个对象))

例:

class Car{

private int num;

public setNum(int number){

this.num=number;

}

Car ben=new Car();

ben.setNum(8);

}

this的应用:

当定义类中功能时,该函数内部要用到调用该函数的对像时,这是用this来表达这个对象。

(但凡本类功能内部使用了本类对象都用this表示)

this在构造函数间的调用:

构造函数间调用不同于一般函数间的调用。

classdemo{

demoString a.int b{

this();     //此处就是调用下面demo(){System.out.pringt(“那就好”)}构造方法。

}

demo(){

System.out.print(“那就好”)

}

publicstatic void mainString[] args{

demop=new demo(“str”,123);    //此处建对象是就会用到上面demoString a.int b)构造方法,在执行时this();又用到了demo()构造方法,其this就代表p这个对象,因为是它让demo()运行的。

}

}

注意:1this语句只能定义在构造函数的第一行,因为初始化要先执行,在执行自己的,如有重复的初始值,就把调用的那个构造函数的初始值覆盖掉,用自己的初始值。

     2一般函数说不能调用构造函数的,因为this语句不能用在一般函数中。

 ------- android培训java培训、期待与您交流! ----------详细请查看:http://edu.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值