黑马程序员--Java面向对象理解
来源:互联网 发布:三菱plc编程教学视频 编辑:程序博客网 时间:2024/05/20 11:49
——- android培训、java培训、期待与您交流! ———-
1.1 面向对象概念
1.1.1 面向对象概念
面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发, 扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。---摘自百度百科 相对面向过程而言,面向对象和面向过程都是一种思想。 面向过程强调的是功能行为,而面向对象强调的对象本身。 例子 计算长方形面积。思路:1:先求出长;2:求出宽;3:求面积:长x宽 例子 计算长方形面积。思路:1:设置长方形对象的长;2:设置长方形对象的宽;3:调用长方形的求面积方法 在使用面向对象分析过后,所有的操作都在对象本身,我们调用对象自己的功能就可以实现目的
package com.test.blog1;/* * 长方形类 * 包含的属性:长、宽 * 包含的行为:求面积 * */public class Rectangle { // 属性:长 private long chang; // 属性:宽 private long kuan; // 求面积,并返回面积值 public long getMianji(long chang, long kuan) { return chang * kuan; } // 取得长属性 public long getChang() { return chang; } // 设置属性长的值 public void setChang(long chang) { this.chang = chang; } // 取得宽的值 public long getKuan() { return kuan; } // 设置属性宽的值 public void setKuan(long kuan) { this.kuan = kuan; }}
1.1.2 面向对象特征
1:封装(encapsulation)
上述例子中,属性长、属性宽、属性求面积方法都封装在长方形类中就是封装的体现
2:继承(inheritance)
3:多态(polymorphism)
1.2 类与对象的关系
类是具体事物的抽象,概念上的定义。对象即是该类事物实实在在存在的个体。 对于同一类事物可以抽取它们的共性的内容,定义在类中。 例子: 在上述求长方形面积的例子中,可以进行思考:每个长方形都具有长、宽属性,都有求取面积的功能。 那么可以对这些共性的东西进行抽取定义,就形成了长方形类。该类包含属性长和宽,包含方法求面积。 而每个长方形的长和宽都不一样,对应的面积也不一样。不同长、宽的长方形就是一个个对象。
1.2.1 如何定义类
定义类就是定义类所抽象出来的对象的属性和行为。 属性也可以理解为变量,行为也可以理解为方法。 如上述例子中,长和宽就是变量(属性),求面积方法就是方法(行为)。 变量(属性)的分类: a):成员变量: 1.成员变量定义在类中,在整个类中都可以被访问。 2.成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。 3.成员变量有默认初始化值。(每个类型的变量对应不同的初始值) b):局部变量: 1.局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。 2.局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。 3.局部变量没有默认初始化值。
1.2.2 类创建并使用对象
例子:创建长方形类并调用其求面积方法
package com.test.blog1;/* * * 创建类并使用类 * 测试创建长方形类并调用其求面积方法 * * */public class Demo { public static void main(String[] args) { // 通过new关键字,建立对象 // r就是一个类类型的引用变量,该变量存在在栈内存中,指向了该类的对象。new Rectangle()对象在堆内存中 Rectangle r = new Rectangle(); // 为长赋值 r.setChang(12l); // 为宽赋值 r.setKuan(3l); // 调用对象的方法求面积 long result = r.getMianji(r.getChang(), r.getKuan()); System.out.println("长为:" + r.getChang() + " 宽为:" + r.getKuan() + "的长方形面积为: " + result); }}
运行结果:
1.2.3 对象内存分析
Rectangle r1 = new Rectangle(); // 为长赋值 r1.setChang(12l); // 为宽赋值 r1.setKuan(3l); Rectangle r2 = new Rectangle(); // 为长赋值 r2.setChang(12l); // 为宽赋值 r2.setKuan(3l);
结构分析图:
new操作符定义的实体会在堆内存中开辟一个新的空间,并且每一个对象中都有一份属于自己的属性。
各个对象属性的修改不会影响。
堆内存中的对象如果没有变量引用,会被垃圾回收器回收。
例如将r2=null,此时r2原来执行堆内存中地址为0x0089的对象就会被垃圾回收器回收。
思考:在项目开发中,对于成员变量的使用,如果不在使用, 则尽可能的明确定义为null,是不是可以防止垃圾没被回收,预防内存泄露
1.3 构造函数
1.3.1 特点
- 函数名与类名相同。
- 不用定义返回值类型。
- 没有具体的返回值
例子:
package com.test.blog1;/* * 长方形类 * 包含的属性:长、宽 * 包含的行为:求面积 * */public class Rectangle { //无参构造函数 public Rectangle() { System.out.println("长方形类的构造函数,没有参数"); } // 属性:长 private long chang; // 属性:宽 private long kuan; // 求面积,并返回面积值 public long getMianji(long chang, long kuan) { return chang * kuan; } // 取得长属性 public long getChang() { return chang; } // 设置属性长的值 public void setChang(long chang) { this.chang = chang; } // 取得宽的值 public long getKuan() { return kuan; } // 设置属性宽的值 public void setKuan(long kuan) { this.kuan = kuan; }}
1.3.2 与一般方法区别
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化。
一般函数:对象创建后,需要函数功能时才调用。
构造函数:对象创建时,会调用并且只调用一次。
一般函数:对象创建后,可以被调用多次。
分析:构造函数由Java自发执行,并且只执行一次;
一般函数由调用者执行,执行次数不限。
如果没有显示声明构造函数,则java会默认生成一个无参的执行体内没有内容的构造函数。
1.3.3 构造函数可以有多个
构造函数可以有多个,因为同名,所以是以重载的形式存在
例子:
package com.test.blog1;/* * 长方形类 * 包含的属性:长、宽 * 包含的行为:求面积 * */public class Rectangle { // 属性:长 private long chang; // 属性:宽 private long kuan; // 无参构造函数 public Rectangle() { System.out.println("长方形类的构造函数,没有参数"); } // 有参数的构造函数 public Rectangle(long chang, long kuan) { this.chang = chang; this.kuan = kuan; System.out.println("长方形类的长为:" + chang + " 宽为:" + kuan); } // 求面积,并返回面积值 public long getMianji(long chang, long kuan) { return chang * kuan; } // 取得长属性 public long getChang() { return chang; } // 设置属性长的值 public void setChang(long chang) { this.chang = chang; } // 取得宽的值 public long getKuan() { return kuan; } // 设置属性宽的值 public void setKuan(long kuan) { this.kuan = kuan; }}
执行结果:
0 0
- 黑马程序员--理解JAVA面向对象
- 黑马程序员--java面向对象的理解
- 黑马程序员--Java面向对象理解
- 黑马程序员java学习日记九 面向对象的理解
- 黑马程序员--Java入门之面向对象的理解
- 黑马程序员 java面向对象
- “黑马程序员”-Java面向对象
- 黑马程序员--java面向对象
- 黑马程序员---面向对象【java】
- 黑马程序员-------Java面向对象
- 黑马程序员--java面向对象
- 黑马程序员-java面向对象
- 黑马程序员------JAVA面向对象
- 黑马程序员:java面向对象
- 黑马程序员-----JAVA面向对象
- 黑马程序员 java面向对象
- 黑马程序员-Java面向对象
- 黑马程序员 Java面向对象
- android中的Bitmap
- fedora20配置静态ip
- I/O 多路复用之 Event Poll
- 数位DP专题小结--by sgx
- HDU周赛题
- 黑马程序员--Java面向对象理解
- hdu 1875畅通工程续
- 关于内存中栈和堆的区别[转]
- EL表达式
- Java基础-多线程-生产者与消费者(笔记)
- 解决Android系统中CSS设置select高度无效的BUG
- UIButton的实现(含有边框)
- uva 529 - Addition Chains
- 【NYIST】暑假训练赛 (一)----Problem F