黑马程序员,Java基础知识三:面向对象
2014-12-29 20:41
232 查看
面向对象的概念
请说说你认为什么是面向对象?相信很多人在面试时都会被问到这道题,所谓”有一千个读者,就会有一千个哈姆雷特“,大家的答案都不尽相同,而我会这么说:面向对象是一种思想,它是相对于面向过程而言的。在c和c++中,他们都有着面向过程的思想,所谓面向过程,强调的是功能的行为,比如汽车在路上行驶,它强调”行驶“这个事件,而不是汽车本身。相反,面向对象则是强调具备了功能的对象。比如这辆会动的车,比如有制冷功能的冰箱。在面向对象的思想中,一切事物皆为对象,通过面向对象这种方式,将现实中的事物都抽象为对象,把事物间的关系都抽象成类与类之间的继承,实现等。在面向对象的开发过程中实际就是在不断的创建对象,使用对象和指挥对象去做事情,并且我们关心的是如何去管理维护对象之间的关系。面向对象有三个特征:封装,继承,多态。封装指的是将对象的属性和实现的细节都隐藏,然后提供公共方法对其访问。
类的定义
生活中描述事物无非就是描述事物的属性和行为。比如人的身高,体重等属性,有说话,打球等行为。而在Java中,用class来描述事物也是如此,属性:对应类中的成员变量。行为:对应类中的成员函数。定义类,其实就是在定义类中的成员。(成员函数和成员变量)
成员变量和局部变量有什么不同呢?
成员变量
1.成员变量是定义在类中的,在整个类中都可以被访问。2.成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
3.成员变量有默认初始化值。
局部变量
1.局部变量只定义在局部范围内,如:函数内,语句内等。2.局部变量存在于栈内存中。
3.作用的范围结束,变量空间会自动释放。
4.局部变量没有默认初始化值。
创建对象的实例;
class Car //对Car这类事物进行描述 { String color = "red"; int num = 4; void show() { System.out.println("color="+color+"..num="+num); } } class CarDemo { public static void main(String[] args) { Car c = new Car(); //建立对象 c.color = "black"; //对对象的属性进行修改 c.show(); //使用对象的功能。
匿名对象
匿名对象是对对象的简化形式匿名对象有两种使用情况;
1.当对对象方法仅进行一次调用时
2.匿名对象可以作为实际参数进行传递时
new Car().show();
封装
封装指的是隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处:1.将变化隔离;
2.便于使用;
3.提高重用性;
4.提高安全性。
封装的原则:
1.将不需要对外提供的内容都隐藏起来
2.把属性都隐藏,然后提供公共方法对其访问。
注意:私有private不等于封装,它只是封装的一种表现形式。
class AddMethod{ public static void main (String[] args){ int[] a ={1,5,1,3,5,4,6,98,87,10}; System.out.println("最大值为:"+getMax (a)); } public static int getMax(int[] arr) { int max = arr[0]; for (int i : arr) { max = (max > i) ? max : i; } return max; }
在这段代码中我封装了add这个方法,让它成为这个类的一个功能,能重复被调用。
private关键字
private是一个权限修饰符。用于修饰成员(成员变量和成员函数)
被私有化的成员只有在本类中有效。
常用之一:
将成员变量私有化,然后对外提供对应的get,set方法对其进行访问。这样提高了对数据访问的安全性。
构造函数
当我们在分析事物,定义一个类时,该事物具备一些特性属性时,我们将这些内容定义在构造函数中。在对象一建立时就会调用与之对应的构造函数,如果在一个类中没有定义构造函数时,那么系统会默认在该类中创建一个空参数的构造函数。
特点:1.构造函数名与类名相同;
2.不需要定义该函数的返回值类型;
3.不可以在构造函数中写return语句;
作用:构造函数是给对象进行初始化的。一个对象的建立,只运行一次构造函数。
注意:1.默认构造函数的特点:它是系统为没有自定义构造函数的类创建的空参数构造函数,如果已经在类中定义了构造函数,则不再有默认的构造函数。
2.多个构造函数是以重载的形式存在的。
构造代码块
构造代码块是给类中所有对象进行统一初始化的构造函数,它写在类块的最上端,而且优先于构造函数的而执行。格式:
{ 构造代码块内容; }
静态代码块
静态代码块是用来给类进行初始化的,优先于主函数而存在,它随着类的加载而执行,而且,只执行一次。格式:
static{ 静态代码块内容; }
this关键字
this关键字:this代表本类对象,代表它所在的函数所属对象的引用。简单的说就是,哪个对象在调用this所在的函数,this就代表哪个对象。this的应用:
当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
另有别于this.方法()的使用方式:this语句,例如:this(name),这是用于构造函数之间进行互相调用的,只能在构造函数之间,而且只能定义在构造函数的第一行。
class Person { private String name; private int age; Person(int age) { this.age = age; } Person(String name) { this.name = name; } Person(String name,int age) { this.name = name; this.age = age; } public void speak() { System.out.println("name="+this.name+"...age="+this.age); this.show(); } public void show() { System.out.println(this.name); } public boolean compare(Person p) { return this.age==p.age; } } class Person2 { public static void main(String[] args) { Person p1 = new Person(20); Person p2 = new Person(25); boolean b = p1.compare(p2); System.out.println(b); Person p3 = new Person("lisi"); Person p4 = new Person("zhangsan"); p3.speak(); p4.speak(); } }
static静态关键字
static关键字的用法:它是一个修饰符,用来修饰成员(成员变量,成员函数)。当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,格式:类名.静态成员。特点:
1、随着类的加载而加载。
2、优先于所有对象存在。
3、被所有对象共享。
4、可以直接被类名所调用。
5、生命周期最长(随着类的消失而消失)。
静态static的使用注意事项:
1、静态方法只能访问静态成员,非静态方法则静态或非静态都可访问。
2、静态方法中不可以定义this,super关键字,因为静态优先于对象存在。所以静态方法中不可以出现this关键字。
3、主函数是静态的。
静态有利有弊:
利:对对象的共享数据进行单独空间的存储,节省空间,没有必要每一个对象中都存储一份。而且可以直接被类名调用。
弊:生命周期过长。而且访问出现局限性(静态只能访问静态)
什么时候使用静态static?
定义静态变量:当对象中出现共享数据时,该数据应该被静态所修饰(对象的特有数据要定义成非静态存在于堆内存中)
定义静态方法:当功能内部没有访问到对象的特有数据时,比如name,age,这些在对象被创建后才分别赋予的变量时,那么该功能可以被定义为静态的。
相关文章推荐
- 黑马程序员——java基础知识之面向对象(一)
- 黑马程序员-Java基础知识预备之Java面向对象的理解(part2)
- 黑马程序员——Java基础知识——面向对象(一)
- 黑马程序员———java基础知识———面向对象
- 黑马程序员——Java基础知识——面向对象(三)
- 黑马程序员 Java基础知识总结-面向对象三大特征
- 黑马程序员---java基础知识之面向对象(二)
- 黑马程序员——java基础知识之面向对象(三)
- 黑马程序员——Java基础知识——面向对象(二)
- 黑马程序员_JAVA基础知识总结——面向对象三大特征
- 黑马程序员-Java基础知识预备之Java面向对象的理解(part1)
- 黑马程序员——java基础知识之面向对象(二)
- 黑马程序员---Java基础--07天(面向对象之三)
- 黑马程序员---Java基础--09天(面向对象之四异常)
- 黑马程序员——java语言基础知识回顾(四)
- 黑马程序员-Java语言基础 –面向对象 第7天
- 黑马程序员---Java基础--08天(面向对象之三多态)
- 黑马程序员——java语言基础知识回顾(二)
- 黑马程序员--java基础知识注意点收录
- 黑马程序员—4、JAVA基础&面向对象