java面向对象 基础

目录

二、类与对象

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

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

五、封装

六、构造方法

七、this关键字

 

4、自定义类

一、代码块static

1.定义

2、分类及详述

二、static

1.概念

2.特点

3.注意事项

4.静态变量(static修饰的成员变量)和非静态变量的区别

5.内存图

6.什么时候用

 


1.Java语言属于面向对象编程语言
面向对象解决问题的思路:
从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人
类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并
根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构
成单位

2.面向对象编程包括
面向对象的分析(OOA,Object Oriented Analysis)
面向对象的设计(OOD,Object Oriented Design)
面向对象的编程实现(OOP,Object Oriented Programming)
面向对象思想说明
OOA:通常是把构成问题域的事务分解成各个对象,给对象赋予相应的属性
和行为,通过多个对象的相互协调

OOD:这些对象没有先后顺序,共同作用才构成了整个系统。我们只要用代
码设计出这几个类型的对象,然后让他们互相通信、传递消息就可以完成
系统功能

OOP:编写代码

分析系统中涉及的事务,根据“对象”抽象出“类”;
找出对象共有的特点,并且在类中定义为属性;
找出对象共有的行为,并且定义为类的方法。
 

3.面向对象概念
抽象(abstract):
从事物中舍弃个别的非本质特征,抽取共同的本质特征
只考虑与问题域相关的信息,而忽略与问题域不相关的部分
对象(object):是系统中用来描述客观事物的一个实体。
可以是有形的,也可以是无形的(如一个客户,一张银行卡,窗体中的一个按钮等等)
对象是构成世界的一个独立单位
具有自己的静态结构(属性)和动态行为(方法)

一、面向对象思想

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

A:区别:

**面向过程关注执行过程,这个时候我们是执行者。

**面向对象关注的是最终功能,这个时候我们是指挥者。

B:联系:.

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

2、面向对象

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

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

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

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

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

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

找对象,完成功能。

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

4、面向对象的三大特性

A:封装

B:继承

C:多态

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

二、类与对象

1、类

是对现实世界事务的抽象。

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

B:什么是类
 把相似的对象划归成一个类。
 在软件设计中,类,就是一个模板,它定义了通用于一个特定种
类的所有对象的属性(变量)和行为(方法)

2、对象

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

3、描述一个类

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

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

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

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

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

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。

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());

五、封装

1、概念

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

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

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

2、好处

A:将变化隔离。

B:便于使用。

C:提高重用性。

D:提高安全性。

3、private关键字

A:private

**私有的

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:构造方法的注意事项

**自定义类中如果没有构造方法,系统会默认给出一个无参构造方法。

    **如果你给定了构造方法,系统将不再提供无参构造方法了。

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

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

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

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

 

七、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

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();//是可以的。

}

 

4、自定义类

在自定义类的时候:

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

定义的时候给属性。

A:set赋值 开发都用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;

}

}

 

一、代码块

1.定义

它是由一对{}括起来的代码。

2、分类及详述

A:局部代码块用在局部,可以及时释放内存,提到效率。

B:构造代码块每个构造方法运行时都会自动调用构造代码块。可以对所有对象初始化。

C:静态代码块随着类的加载而执行,而且只执行一次,优先与主方法。

假如我们有一个Person对象。请问Person p = new Person();在内存中到底做了什么呢?

步骤

A:把Preson.class文件加载进内存。

B:在栈内存空间开辟一个小空间,存储p变量。

C:在堆内存中开辟空间。创建对象。

D:对对象中的成员变量进行默认初始化。

E:执行构造代码块,如果没有构造代码块,就不执行。

F:对对象中的成员变量进行赋值。

G:把对象构造初始化完毕。

H:将对象在堆内存的首地址赋给栈内存变量p。

二、static

1.概念

静态的意思,用于修饰成员。

2.特点

随着类的加载而加载

优先于对象存在

被所有对象所共享

可以直接被类名调用

3.注意事项

A:静态成员只能访问静态成员。

B:静态方法中不能有this,super关键字。

C:主函数是静态的        单讲。

4.静态变量(static修饰的成员变量)和非静态变量的区别

A:静态变量随着类的加载而加载,随着类的消失而消失。生命周期最长。

   非静态变量随着对象的创建而存在,随着对象的消失而消失。

B:静态变量和类相关,是所属于类的,可以直接被类名调用,也可以被对象名调用。也称为类变量。

非静态变量和对象相关,是所属于对象的,只能被对象名调用。称为实例(对象)变量。

C:静态变量存储于方法区中的静态区。

   非静态变量存储于对象的区域,在堆内存中。

D:静态变量的数据被所有的对象共享。

   非静态变量是每个对象特有的数据。

5.内存图

6.什么时候用

分析问题时:

当这个内容是所有对象所共享的时候,我们就把它定义为static修饰的。

当这个内容是每个对象所特有的时候,就把它定义为非static修饰的。

写代码的时候,你可以考虑:

某个成员方法访问了对象所共享的内容。或者说,访问了静态成员。那么,该方法 就必须定义为static修饰的。访问了特有的属性,就不能被静态修饰。

简单说:如果函数中访问了成员变量,不能静态,否则可以静态化,直接被类名调用即可。

猜你喜欢

转载自blog.csdn.net/qq_36472252/article/details/85630985