您的位置:首页 > 职场人生

黑马程序员,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 笔记 总结三