------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的变量.