面向对象思想 类与对象-自学笔记1

来源:互联网 发布:苹果电脑哪里下软件 编辑:程序博客网 时间:2024/05/16 00:50

 面向对象思想  类与对象  

一、面向对象思想

1面向对象与面向过程区别和联系。

A:区别:

**强调的是功能行为,面向过程关注执行过程,这个时候我们是执行者。

**面向对象关注的是具备最终功能的对象,这个时候我们是指挥者,可以使问题简单化。

B:联系:.

**面向对象是基于面向过程的。

2、面向对象

A:面向对象思想的特点。

**是符合人们思考习惯的一种思想。

***编程思想就是来源于生活。

**将复杂的问题简单化了。

**把我们从执行者变成了指挥者。

B:举例

**我去面试,boss调用了我的写程序的功能,不需要自己去做。

**找女朋友洗衣服、做饭。

C:请给我解释面向对象的思想。

**先说特点

**举例说明这些特点

D:分析对象方法--->名词提炼法。也就是说名词都可以看作是具有功能的对象。

E:以后的开发过程,其实就是在找对象,没有对象就创建一个对象;

   流程 找对象--->建立对象------>使用对象------>维护对象的关系。

3、面向对象思考问题的方式

找对象,完成功能。

如果对象不存在,自己就造一个对象。

4、面向对象的三大特性

A封装

B继承

C多态

此外面向对象还有个一个特性------->抽象!

二、类与对象

1、类 

是对现实生活事物的抽象。

A:类就是这类事物的抽象。

2、对象 

是该类事物具体的存在个体。

3描述一个类

A:现实生活中我们用属性和行为来描述一个事物。

B:这个时候我们就可以用属性和行为来描述一个类

那么,他们在类中分别对应什么呢?

**属性 -- 成员变量 (属性)--------------->对应类中的变量,整个类中有效

**行为 -- 成员方法 (函数,功能)------>对应类中的函数,整个类中有效

C:具体的对象,就是java存在堆内存中使用new建立的。

D:定义类就是在描述事物,就是定义属性和行为。

4、自定义类的分析过程

A:分析:

**首先分析这个类是个什么样的事物

**其次你就应该该事物具有哪些属性和行为

**把这个事物的属性和行为对应成我们类的成员变量和成员方法。

B:自定义一个电脑类

**属性 颜色,品牌,重量

**行为 开机,关机,上网

   对应成类

//自定义电脑类

class Computer

{

String color;//颜色

String type;//品牌

double weight;//重量

public void start(){}//开机

public void stop(){}//关机

public void online(){}//上网

}

5、对象的创建和使用及对象的内存图

A对象的创建

Student s = new Student();//创建一个Student的对象,并把它赋给了Student类型的s,其中s就是类型变量

B:使用对象

如果你想使用类中的方法和属性,你必须通过类的实例(对象)来调用。

调用方式:

对象名.属性;

对象名.方法名(参数列表);

三、成员变量和局部变量的区别

1作用范围

成员变量作用于整个类。

局部变量只作用于它所属的范围(函数,语句);

2声明周期&位置

成员变量存储在堆内存中,是属于对象的,随着对象的存在而存在,随着对象的消失而消失。

局部变量存储在栈内存中,是属性它所属范围的,使用完立即被释放。

3初始值

成员变量都有默认初始化值。

**整型 0

**浮点型 0.0

**字符型 '\u0000' 空字符

**布尔型 false

**字符串 null

局部变量没有默认值,要想使用,必须遵循:

先定义(声明),再赋值,最后使用。

四、匿名对象(为了简化书写)

1概念

没有名字的对象。是对象的一种简写形式。

2什么时候用

A该对象只执行一次方法的调用。多次调用必须起名字!

**new Car().start();

B可以作为实际参数传递

**public static void method(Car c){}

**method(new Car());

C:使用匿名对象调用方法有意义,调用属性无意义。

五、封装

1概念

把实现细节隐藏,提供公共的访问方法。

任何对象或者系统都应该有一个明确的边界,边界内部的改变对外部没有影响,在java中,类包含了数据和方法,将数据放到一个类中就构成了封装。他将变化的进行了隔离,这样大大的提高了程序的安全性,由于他提供了公共访问方式,我们只需要调用它的功能即可,这样就提高了代码的复用性(只关注功能不用在意具体实现),自然而然就方便使用了。我们只需要将类中的成员变量私有(在变量名前加private即可),并提供相对应的setget方法。 机箱和主板的例子。

私有只是封装的一种体现,隐藏才算是封装。

2好处

A:将变化隔离。

B:便于使用。

C:提高重用性。

D:提高安全性。

3private关键字

Aprivate 

**私有的

B:特点

**是一个权限修饰符。

**可以修饰成员,被修饰的成员只能在本类中访问

C:一般用法

**一般用于将成员变量私有,提供公共的get,set方法进行访问。

自定义类 一般格式:

class Student{

private String name;

public void setName(String n){

name = n;

}

public String getName(){

return name;

}

}

注意:set方法可用于对成员变量进行赋值。

六、构造函数及构造代码块

1用途

创建对象,并进行初始化动作。

2特点

A构造方法名和类名相同

B没有返回类型

C:没有返回值

运行特点:对象创建时被调用。

3构造方法与成员方法的区别

A:格式区别

构造方法要求:方法名与类名相同,没有返回类型。

成员方法要求:记住函数的定义格式。

B:用途

构造方法用于创建对象,并初始化值。

成员方法用于完成一个功能。

C:什么时候被调用

构造方法一new就被调用。

成员方法时通过对象名来调用。

你想创建对象必须使用构造方法。

你想使用功能必须通过对象名来调用。

你想使用一个功能:首先创建对象,然后使用对象的功能。

4构造函数注意事项

A:构造方法名相同,参数不同。

B构造函数的作用,用于给对象的初始化。

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

当在类中自定义了一个构造函数后,默认的构造函数就没有了。

D:构造函数和一般函数的区别 构造函数和一般函数的写法不同;运行上也不相同,构造函数在对象一建立就运行,给对象初始化,且只能运行一次。 而一般函数是对象调用才执行,且可以调用多次。

  ***如果给定的有无参构造方法,你可以继续使用无参构造方法来创建对象。

  ***如果没有无参构造方法,你可以不使用。否则,就会报错。

  **建议:每次我们都手动给出无参构造方法。

注意:带参构造方法也可以对成员变量进行赋值。

E:什么时候定义构造函数?  当分析事物是,该事物存在具备一些特性的行为,那么这些内容就定义在构造函数中。

5.构造代码块

作用:给对象进行初始化。定义的是不同对象共性初始化内容。

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

构造代码块和构造函数的区别:构造代码块是给所有对象进行统一初始化;而构造函数是给相对应的对象初始化。

七、this关键字

1概念 

代表本类对象的一个引用

A方法被哪个对象调用,该方法内的this就代表哪个对象。

2使用场景

A局部变量隐藏成员变量

class Student{

private String name;

/*

public void setName(String n){

name = n;

}

*/

public void setName(String name){

this.name = name;

}

public String getName(){

return name;

}

}

Student s = new Student();

s.setName("张三");

String str = s.getName();

System.out.println(str);

System.out.println(s.getName());

B构造方法中使用this

This语句:用于构造函数之间进行相互调用;

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

class Student{

private String name;

private int age;

Student(){}

Student(String name){

this.name = name;

}

Student(int age){

this.age = age;

}

Student(String name,int age){

//this(name);//代表就是调用构造方法----构造方法中的调用方式

this.name = name;

this.age = age;

}

}

C比较年龄

public boolean compare(Person p){

return this.age==p.age;

//return this.getAge()==p.getAge();//是可以的。

}

3内存图看懂

4、自定义类

我们后面在自定义类的时候:

1:给属性赋值有几种方式

定义的时候给属性。

Aset赋值 开发都用set

B:构造方法

2:提供一个无参构造

//自定义一个学生类

class Student{

private int age;//姓名

private String name;//年龄

Student(){}

public void setAge(int age){

this.age = age;

}

public int getAge(){

return age; //return this.age;

}

public void setName(String name){

this.name = name;

}

public void getName(){

return name;

}

}