------- android培训、java培训、期待与您交流!----------
为什么会有静态,静态有什么用?
当每一个对象都要使用这个属性或方法的时候,可以把它定义为静态的
因为每个对象都要使用,不必创建很多分,这样很浪费内存,把它定义为静态,在方法区里只有一份,节省内存,加快速度
1 静态:static
用法:是一个修饰符,用于修饰成员(成员变量,成员函数)
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,可以直接被类名调用 类名.静态成员
2 静态static的特点:
随着类的加载而加载:也就是说静态会随着类的消失而消失,它的生命周期最长
优先于对象的存在
明确一点:静态是先存在,对象是后存在的
被所有对象共享
能被类名调用
3 类变量和实例变量(成员变量)的区别
类变量随着类的加载而存在与方法区中
实例变量随着对象的建立而存在与堆内存中
类变量生命周期最长,随着类的消失而消失
实例变量生命周期随着对象的消失而消失
4 静态使用注意事项:
1 静态方法只能访问静态成员
非静态方法既可以访问静态也可以访问非静态
2静态方法中不可以定义this super关键字
因为静态优先于对象存在,所以静态方法中不可以出现this
什么时候定义静态?
当功能内部没有访问到非静态数据(对象的特有数据)
那么该功能是可以定义成静态的
5 静态有利有弊
利处:对对象的共享数据进行单独空间的存储,节省空间,没有必要每个对象都存储一份,同时还可以直接被类名调用
弊处:生命周期过长
访问出现局限性
例子:
class person
{
String name; //成员变量,实例变量
static String country="cn'; //静态变量的成员,类变量
public static void show(String name)
{
System.out.print(name);//这句有错,因为对象没建立name变量不存在
hah(); //这句有错,因为对象没建立hah方法不存在
}
public void hah();
{}
}
class test1
{
public stati void main(String[] args)
{
person.country; //静态成员可以被类名直接调用
person.show; //这句有错,因为show方法下面的name还没有
}
}
6 解读主函数 public static void main(String[] args)
主函数是一种特殊的函数,作为程序的入口,可以被jvm调用
主函数的定义:
public;代表该函数访问权限是最大的
static:代表主函数随着类的加载就已经存在了
void:主函数没有具体的返回值
main:不是关键字,但是是一个特殊的单词可以被jvm识别
(String[] arr)函数的参数,参数类型是一个字符串类型的数组
jvm在调用主函数时,传入的是new String[0];
class person
{
public static void main(String[] args)
{
System.out.print(args);//args.length可以看出数组长度,args可以得到是什么东西
}
}
7 将方法都静态后,可以方便于使用,但是该类还是可以被其他程序建立对象的,为了 更为严谨,强制让该类不能建立对象,可以通过将构造函数私有化完成
privateArrayDemo(){}
8 文档说明书的制作 /** */可以被文档注释工具提取
/**
这是一个可以对数组进行操作的工具类,该类中提供了,获取最值,排序等功能
@author 张三
@version v1.1
*/
javadoc -dmyhelp -author -version ArrayTool.java
-d:目录
myhelp:随便的文件夹,如果当前目录有这个文件夹就自动创建有就不创建
myhelp是文件夹名称,也可以c:\haha\ha这是自己定义要放的文件夹
生成帮助文档的类要是public
生成帮助文档的类的构造函数一般都要私有,因为不给建对象
9 一个类中默认会有一个空参赛的构造函数
这个默认的构造函数的权限和所属类一致
10 静态代码块
格式:
{
执行语句
}
特点:随着类的加载而加载,只执行一次,优先于主函数
11 Person p=newPerson("张三",20);
该句话都做了什么事情?
1因为new用到了person.class所以会先找到Person.class文件并加载到内存
2执行该类中的static代码块,如果有的话,给Person.class类进行初始化
3在堆内存中开辟空间,分配内存地址
4在对内存中建立对象的特有属性,并进行默认初始化
5对属性进行显示初始化
6对对象进行构造代码块初始化
7对对象进行对应的构造函数的初始化
8将内存地址赋给栈内存中的p变量
3在堆内存中开将内存地址赋给栈内存中的p变量
12 设计模式:解决某一问题最行之有效的方法
java中有23种设计模式
单例设计模式:解决一个类在内存中只存在一个对象的情况
想要保证对象的唯一性
1禁止其他程序建立对象 将构造函数私有化
2在本类中自定义一个对象 在类中创建一个本类对象
3把这个对象提供出去,给其他类访问 提供一个方法可以获取到该对象
例子:
饿汉式:先初始化对象,person类一进内存,对象就被建立
开发一般用饿汉式,因为对象迟早都要建立
class person
{
private static int;
private static person s=new person();
public static person getInstance()
{
return s;
}
}
class test1
{
public static void main(String[] args)
{
person s1=getInstance();
}
}
懒汉式:对象是方法被调用时才初始化,也叫做对象的延迟加载
person类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象
class person
{
private static int;
private static person s=null
public static person getInstance()
{
if(s==null) //如果cpu读到if(s==null)不动的话
-->A //多线程的话,对象的建立就不唯一了
-->B //解决方案:
//if(s==null)
//{
//synchronized(person.class)
//{
//if(s==null)
//s=new person();
//}
//}
s=new person();
return s;
}
}
------- android培训、java培训、期待与您交流!----------