黑马程序员JAVA 070---080 小结

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


071_面向对象(this关键字)_黑马程序员_Java基础视频

构造函数是可以私有化的。
如果你把所有的构造函数都私有化的话,

那这个对象是不会被创建的,因为不能私有化。


变量名取的没意义,阅读性很差。

this.name=name;

this:看上去,是用于区分局部变量和成员变量重名的现象。

this为什么可以解决这个问题?

this到底代表的是什么呢?

this就代表本类的对象,到底代表哪一个呢?

this代表它所在函数所属对象的引用。

简单说:哪个对象在调用this所在的函数,this就代表哪个函数。

自己家有电脑,就在自己家里玩,自己家没电脑,就去网吧。

072_面向对象(this关键字的应用)_黑马程序员_Java基础视频

需求:给人定义一个用于比较年龄相同的功能,也就是是否是同龄人。

this的应用,当定义类中功能时,该函数要用到调用该

函数的对象时,这时用this来表示这个对象。

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

073_面向对象(this关键字在构造函数间调用)_黑马程序员_Java基础视频

只存在构造函数间,构造函数间互相调用的话不能直接调用。

构造函数之间互相调用只能用this调用,

this语句调用构造函数必须放在第一行。

初始化要先执行

如果初始化里面还有初始化的话,先执行第一行初始化再执行自己的初始化。

方法this();

this(name);//p(name);

074_面向对象(Static关键字)_黑马程序员_Java基础视频

static 修饰符存在

静态:static

用法:是一个修饰符,用于修饰成员(成员变量,成员函数);

static 修饰的对象就不会在堆内存中了,被单独提取了,静态修饰的内容被共享。

当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。

类名.静态成员

 方法区,共享区,数据区好多个名字的新内存空间

static特点:

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

所谓随着类加载而加载,随着类的消失而消失

说明它的生命周期最长

静态的成员变量,也叫类变量。

2,优先于的对象存在

明确一点:静态是先存在的,对象是后存在的,

3,被所有对象所共享

4,可以直接被类名调用

静态对象不宜过多,

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

1存放位置;

类变量随着类的加载而存在于方法区中。

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

2生命周期

类变量生命周期最长,随着类的消失而消失。

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

静态能修饰变量,也能修饰方法。

静态使用注意事项

1静态方法只能访问静态成员

非静态方法即可以访问静态也可以访问非静态

2静态方法中不可以定义this super关键字。

3,主函数是静态的。

因为静态优先于对象存在,所以静态方法中不可以出现this.

静态有利有弊

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

可以直接被类名调用。

弊,生命周期过长,访问出现局限性。

075_面向对象(main函数)_黑马程序员_Java基础视频

为什么主函数是静态的呢

public static void main(String[] args)

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

主函数的定义

public 代表着该函数的访问权限是最大的。

static 代表这主函数随着类的加载就已经存在啦。

void 主函数没有具体返回值

main不是关键字,但是是一个特殊的单词,可以被jvmshibie

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

主函数是固定格式的,jvm识别。

哈希值,就是地址值

jvm在调用主函数时,传入的是new string[0];

076_面向对象(静态什么时候使用)_黑马程序员_Java基础视频、

什么时候使用静态


要从两方面下手;

因为静态修饰的内容有,成员变量和函数。

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

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

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

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

当功能内部没有访问到非静态数据(对象的特有数据),

那么该功能可以定义成静态的。

077_面向对象(静态的应用-工具类)_黑马程序员_Java基础视频

静态的应用-工具类

每一个应用程序中都有共性的功能,

可以将这些功能进行抽取,独立封装,

以便复用。

虽然可以通过建立ArryTool的对象使用这些工具方法,对数组进行操作。

发现了问题,

1对象是用于封装数据的,可是ArryTool对象并未封装特有数据。

2,操作数组的每一个方法都没有用到ArrayTool对象中的特有数据。


这时就考虑,让程序更严谨,是不需要对象的。

可是将ArryTool中的方法都定义成static,直接通过类名调用即可。


将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的。

为了更为严谨,强制让该类不能建立对象。

可以通过将构造函数私有化完成。


078_面向对象(帮助文档的制作javadoc)_黑马程序员_Java基础视频

set classpath-.;c:\myclass


接下来,将ArrayTool.class文件发送给其他人,其他人只要将该文件设置到classpath入

径下,但是,很遗憾,该类中到底定义了多少方法,对方不清楚,因为该类并没有使用说明书。

开始制作程序的说明书,java的说明书通过文档注释来完成。


/**

这是一个可以对数组进行操作的工具类,该类中提供了,获取了最值,排序等

功能。 

@author 张三

@version V1.1


*/

/**

空参数构造函数

*/

/**

获取一个整形数组中的最大值。

@param arr接收一个Int类型中的数组。

@return会返回一个该数组中的最大值。

*/

/**

给数组中的元素进行位置的置换

@param arr 接收一个Int类型的数组

@param a 要置换的位置

@param b 要置换的位置

*/

/**

用于打印数组中的元素,打印形式是;[element,element2, ...]

*/

javadoc -d myhelp -author -version ArryTool.java


类 前面没有public 不可以生成帮助文档


从索引页面看, Index.html

一个类中默认会有一个空参数的构造函数,

这个默认的构造函数的权限和所属类一致。

如果类被public所修饰,那么默认的构造函数也带public修饰符

如果类没有被public修饰,那么默认的构造函数也没有public修饰。

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

api文档 帮助文档

079_面向对象(静态代码块)_黑马程序员_Java基础视频

静态代码块.

格式:

static

{

静态代码块中的执行语句.

}

静态代码块随着类的加载而执行,只执行一次.\

用于给类进行初始化的.

类名调用了个静态方法

080_面向对象(对象的初始化过程)_黑马程序员_Java基础视频

静态代码块优先于对象


构造代码块的优先极是不是比构造函数的优先极高.

person p=new person("zhangsan",20);

该句话都做了什么事情?

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

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

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

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

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

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

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

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

你可能感兴趣的:(黑马程序员JAVA 070---080 小结)