`
jiao13953900900
  • 浏览: 32304 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

黑马程序员-面向对象

    博客分类:
  • java
阅读更多

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

 

 

面向对象

 

 

 

面向对象概念:

面向对象是相对面向过程而言的的

面向对象和面向过程都是思想

面向过程:强调的是功能和行为

面向对象::将功能封装劲对象,强调具备了某种功能的对象

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

 

面向对象的特点:

是一种符合人们思考习惯的思想,对象是被支配的人事物。

可以将复杂的事情简单化。

将程序员从执行者转化为指挥者。

完成需求时:

1.首先要具有所需的功能的对象来用。

2.如果该对象不存在,那么创建一个具有所需功能的对象。

3.这样简化开发并提高复用。

 

面向对象开发,设计,特征。

开发的过程:其实就是不断的创建对象,使用对象,只会对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系。

 

面向对象的特点:

1.封装(encapsulation)

2.继承(inheritance)

3.多态(polymorphism)

 

 

类与对象的关系。

 

使用计算机语言就是在不断的描述现实生活中的事物,java中描述事物通过类的形式体现,类是具体事物的抽象,概念上的定义。

类就是对现实生活中事物的描述。

对象即是该类事物实实在在存在的个体。

 

映射到java中:

描述就是class定义的类

具体对象就是对应java在对内存中的实体。用new建立在对内存中。

 

 

类的定义

 

如果要分析一共有几个对象的时候,使用名次提炼法。

生活中描述事物无非就是描述事物的属性和行为。

java中用类class来描述事物也是如此

属性:对应类中的成员变量

行为:对应类中的成员函数

定义类其实就是定义类中的成员(成员变量和成员函数

 

成员变量和局部变量的区别??

成员变量:

1.定义在类中,在整个类中都可以被访问。

2.随着对象的建立而建立,存在与对象所在的堆内存中。

3.成员变量有默认初始化。

局部变量:

1.局部变量只定义在局部范围内,如:函数内。语句内等。

2.存在于栈内存中。

3.所作用的范围结束,变量空间会自动释放。

4.局部变量没有默认初始化。

 

 

 

匿名对象:new Demo().run()即是一个匿名对象。就是对象不带有名字

匿名对象是对象的简化形式

匿名对象两种使用情况:

1.当对对象方法仅进行一次调用的时候,对成员变量使用无意义。

2.匿名对象可以作为实际参数进行传递。

 

 

封装(encapsulation)

 

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

 

好处:将变化隔离,便于使用,提高重用性,提高安全性。

 

封装原则:1.将不需要对外提供的内容都隐藏起来。

2.把属性都隐藏,提供公共方法对其访问。

 

 

 

private(私有)关键字

是一个权限修饰符,用于修饰类中成员,被私有的成员只在本类中有效。

常用之一:

将成员变量私有话,对外提供对应的set和get方法对其进行访问,提高数据访问的安全性。

 

一个成员变量对应两种访问方式,

1,设置变量

2,获取变量

之所以对外提供访问方式 就是因为可以在访问的时候加入一些逻辑判断等语句。对访问的数据进行操作,提高了代码的健壮性。

 

设置变量:setXXX()  有形参,无返回值。

获取变量:getXXX()  无形参,有返回值。

 

注意,封装不是私有,私有仅仅是封装的一种表现形式。

 

构造函数:

特点:

1.函数名与类名相同

2.不用定义返回值

3.不可以写return语句

 

作用:给对象进行初始化

 

注意:

1.默认构造函数的特点

2.多个构造函数是已重载的形式存在的。

 

在对象一建立就调用与之对应的构造方法。

小细节:

当一个类中没有定义构造函数时,那么系统会默认给类加一个空参数的构造函数。

当在类中定义了任意一种参数的构造函数,那么系统就不会给自动添加空参数构造函数。

 

构造函数与一般函数的区别:

1.构造函数和一般函数和写法上不同

2.构造函数是在对象已建立就执行,给对象初始化,一般函数是对象调用才执行,是给对象添加对象具备的功能。

3.一个对象建立构造函数只运行一次,一般函数可以被该对象调用多次。

 

分析事物时,但事物村子啊就具备一些特性或者行为,那么将这些内容定义到构造函数中。

 

构造代码块:用单独的花括号表示。
{
	sop("run");
}

 作用 :给队形进行初始化

特点:对象已建立就运行,优先于构造函数

 

构造函数和构造代码块的区别:

构造代码块是给所有对象统一初始化的,

构造函数是给对应的对象初始化的。

 

 

this关键字

作用:用于区分局部变量和成员变量重名的情况。

用法有:

this.name=name;

this(name);

 

特点:this代表的其所在函数所属对象的引用。换言之。this代表本类对象的引用。

 

什么时候使用this关键字呢??

当在函数内需要用到调用该函数的对象的时候,就用this表示该对象。

但凡本类功能使用了本类对象,都使用this表示。

用于构造函数之间相互调用只能用this(name),即this后加括号。可以用于同一个类中构造函数重载的情况。

注意:

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

 

 

static(静态)关键字

用法:是一个修饰符,用于修饰成员,

当成员北京台修饰后,除了可以被对象调用以外还可以直接被类名调用。

被修饰的成员具有以下特点:

1.随着类的加载而加载。

2.优先与对象存在。

3.被所有对象所共享一个数据。即多个对象公用一块内存空间。节省内存空间。

4.可以直接用类名调用。类名.静态成员。

 

使用时注意:

静态方法只能访问静态成员,因为非静态成员还不存在。

静态方法中不可以写this和super关键字,因为静态优先于对象存在。

主函数是静态的。

 

 

 

什么时候使用静态?

要从两方面入手,因为静态修饰的成员变量和成员函数

 

什么时候定义静态变量呢?

当对象中出现共享数据时,该数据被静态所修饰。

对象中的特有数据要定义成非静态存在与堆内存中。

 

什么时候定义静态函数呢?

当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义为静态的。

 

静态的应用:每一个应用程序中都有共性的功能,可以将这些功能进行抽取,独立封装,以便复用。

 

静态工具类:

1.该类中方法不调用类中非静态成员,

2.将对外提供的方法都进行静态

3.将不需要对外提供的方法进行私有话

4.将构造函数进行私有化,防止用户建立对象。

 

静态的有点和缺点:

静态的有点:对对象的共享数据进行单独存储,节省空间。没有必要每个对象都存储一份。

静态的缺点:生命周期长,访问有局限性(只能访问静态成员)。

 

实例变量和类变量的区别:

1.存放位置;类变量存在随着类的加载而存在与方法区中。

实例变量随着对象的建立而存在与堆内存中

2.生命周期:类变量声明周期长。随着类的消失而消失。

实例变量生命周期随着对象的消失而消失。

 

 

 

new建立的类是一个类类型变量指向实体,即指向对内存中的地址值。

 

方法区:共享区,数据区。

存放的是类中 的方法和类中的数据

 

 

主函数:是一个特殊的函数,作为程序的入口,可以被jvm调用。

 

主函数的定义:

1.public代表这该函数访问权限是最大的。

2.static==代表主函数随着类的加载就已经存在了。

3.void==主函数没有具体的返回值

4.main==main不是关键字,但是是一个特殊的单词,可以被jvm识别。

(String[] args) ==函数的参数,参数的类型是一个数组,该数组中的元素是字符串,字符串类型的数组。

 

注意:main函数格式不可以改变,只有String[] 的参数名可以改变。只有固定格式jvm才能够识别。

 

jvm在调用主函数的时候,传入的是一个new String[0];

 

那么我们可以通过java 的命令向jvm中传入一个字符串类型的参数。

那么main函数可以对我们传入的字符串进行操作。

 

类的说明书

类的说明书
/**
这是一个对数组进行操作的工具类,该类中提供了获取最值,排序等功能。
@author 张三
@version v1.1

*/

/**
获取一个整形数组中的最大值,
@param arr接收一个Int类型的数组----@param表示接收的参数,如果多个参数可以写多个@param。
@return 会返回一个该书组中的最大值。
*/


使用javacod命令进行编译

javadoc -d myhelp -author -version Demo.java
命令   目录 文件名 作者  版本   源文件

 使用javacod命令进行编译

javadoc -d myhelp -author -version Demo.java

命令   目录 文件名 作者  版本   源文件

 

注意:需要生成doc文件的java类必须是public修饰的,否则会编译失败。

只有public或者太可她修饰的方法才能够出现在帮助文档里面。

 

一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致,

即默认构造函数的权限是随着类的变化而变化的。

 

 

 

静态代码块

格式:

static{
	静态代码块中的执行语句
}

 特点:随着类的加载而执行,只执行一次,并且优先于main函数执行。

 

作用 :用于给类初始化。

 

 

初始化顺序:

1.static代码块初始化-----对类初始化,不能使用this语句

2.默认初始化

3.显式初始化

4.构造代码块初始化-----给对象初始化,可以使用this语句

5.构造函数初始化-----构造函数给对应对象初始化的

 

Person p = new Person("zhangsan",20);在内存中都做了什么呢?

 该句话都做了什么事情?

1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。

2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。

3,在堆内存中开辟空间,分配内存地址。

4,在堆内存中建立对象的特有属性。并进行默认初始化。

5,对属性进行显示初始化。

6,对对象进行构造代码块初始化。

7,对对象进行对应的构造函数初始化。

8,将内存地址付给栈内存中的p变量。

 

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics