---------------------- 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培训、期待与您交流! ----------------------