java中静态成员函数&单例设计模式
2014-03-15 15:29
393 查看
这是静态的基本识:
今天学的是所谓的关键字 static
上午:
对static做了明确的解释以及用法:
一:这个静态的特点是:
1。用static修饰的成员,随着类的加载而加载,
2.用于共享数据,可以被所有对象所共享。
3.储存在方法区,生命周期长,并且优先于对象存在。
4.比对象多了一种调用方式,可以直接类名调用(类名.成员)
二:
1.静态方法不可以定义this super关键字,this指向一个对象,而在静态修饰的方法中先进内存的数据
不可以访问后进内存的数据
2.静态方法只能访问静态变量,非静态方法既能访问静态变量又能访问非静态变量
3.主函数是静态的......
三:静态的好处与弊端......
好处:比对象多了一种调用方式
弊端:只能被静态访问,访问权限降低了
静态修饰的是对象共有的数据
非静态修饰的是对象特有的数据
静态变量与非静态变量的区别:
静态变量也称类变量是放在方法区的随对象的加载而加载,非静态变量也是成员变量,放在堆内存中是
随这对象的创建而产生的,随这对象的消失而消失,他们的生命周期不同。
******************************************************************************************
静态的使用场景是:
1.成员变量,当该成员变量所存储的数据每一个对象都是一样的,这是没有必要把该数据存储到每一个
数据中,只要共享该数据即可,这时该对象就被定义为静态
2.成员函数,当成员函数并没有访问对象中特有的数据时,就将方法定义为静态的。若函数访问了成员
变量,则成员函数是非静态的
******************************************************************************************
******************************************************************************************
******************************************************************************************
帮助文档的制作:
开始时候:首先是 /** */ 里面写 @author作者 @version版本号
制作该类的帮助文档,以便于使用该类中的功能。
:/> javadoc -d toolhelp -author -version ArrayTool.java
*/
/**
这个类使用操作数组的工具类,里面提供了很多的静态的功能,如:排序,获取最大值等。
@author 张三
@version V1.0
*/
public class ArrayTool
{
private ArrayTool(){}//不让其他程序创建该类对象
/**
对int类型的数组进行排序。从小到大。
@param arr 接收一个int类型的数组。
*/
public static void sort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
/**
将int数组转换成字符串。
@param arr 接收一个int类型的数组。
@return 返回该数组的对应的字符串,格式:[元素1, 元素2, ...]
*/
public static String arrToString(int[] arr)
{
String str = "[";
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
str = str + arr[x]+", ";
else
str = str + arr[x] + "]";
}
return str;
}
/*
给数组进行换位操作。
*/
private static void swap(int[] arr,int x,int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
/**
获取数组中的最大值。
@param arr 接收一个int类型的数组。
@return 该数组中的最大值。
*/
public static int getMax(int[] arr)
{
int max = 0;
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
}
:/> javadoc -d toolhelp -author -version ArrayTool.java
*/
******************************************************************************************
******************************************************************************************
******************************************************************************************
静态代码块:格式为:static{code......;}
当类在加载金内存时,如果需要进行一些内容的执行的时候,完成一个类的初始化,就需要使用静态代
码块来完成给类初始化
执行特点:当类被加载时,静态代码块就执行了,而且只执行一次,而且优先于main函数执行
静态代码块,构造代码块,构造函数
******************************************************************************************
******************************************************************************************
设计模式:重点掌握:
设计模式:就是解决问题最行之有效的解决方案,设计模式是一种思想。
Java中总结出23种设计模式。
单例设计模式:
解决的问题是:保证一个类在内存中只存在一个对象
简单说,就是保证类的唯一性
应用场景:比如A,B都要使用配置文件对象,希望A对配置数据修改后,B可以之间使用,那么就需要A程
序跟B程序使用的是同一个对象。
如何保证一个类在内存中的唯一性呢?
1.为了控制该类的对象建立,不让其他程序建立该类对象。
2.在本类中自定义一个本类对象
3.对外提供获取该对象的方式即可。
代码如何实现呢? (***********)
1.可以将构造函数私有化,这样对方程序创建就无法初始化,已达到不允许,其他程序创建对象的目的
2.在本类中,通过new创建一个本类对象
3.提供一个公共的方法返回该对象,方便与其他城西获取对象。
另外的一种表现形式:(饿汉式)(*******)
对象的延迟加载方式: (弊端:当并发访问getinstance方法时,容易出现安全隐患(线程安全隐患)
)(懒汉式)(*******)
******************************************************************************************
饿汉 class single
{ private static single a =new single();
private single(){}
public static single getintance(){return s;}
}
******************************************************************************************
懒汉 class single
{
private static single s =null ; //类一进内存成员值 为null,当用这个对象的时候再创
建这个类,为延迟加载,
private single(){};
public static single getintance()
{
if(s==null)
s=new single();
return s;
}
******************************************************************************************
******************************************************************************************
今天学的是所谓的关键字 static
上午:
对static做了明确的解释以及用法:
一:这个静态的特点是:
1。用static修饰的成员,随着类的加载而加载,
2.用于共享数据,可以被所有对象所共享。
3.储存在方法区,生命周期长,并且优先于对象存在。
4.比对象多了一种调用方式,可以直接类名调用(类名.成员)
二:
1.静态方法不可以定义this super关键字,this指向一个对象,而在静态修饰的方法中先进内存的数据
不可以访问后进内存的数据
2.静态方法只能访问静态变量,非静态方法既能访问静态变量又能访问非静态变量
3.主函数是静态的......
三:静态的好处与弊端......
好处:比对象多了一种调用方式
弊端:只能被静态访问,访问权限降低了
静态修饰的是对象共有的数据
非静态修饰的是对象特有的数据
静态变量与非静态变量的区别:
静态变量也称类变量是放在方法区的随对象的加载而加载,非静态变量也是成员变量,放在堆内存中是
随这对象的创建而产生的,随这对象的消失而消失,他们的生命周期不同。
******************************************************************************************
静态的使用场景是:
1.成员变量,当该成员变量所存储的数据每一个对象都是一样的,这是没有必要把该数据存储到每一个
数据中,只要共享该数据即可,这时该对象就被定义为静态
2.成员函数,当成员函数并没有访问对象中特有的数据时,就将方法定义为静态的。若函数访问了成员
变量,则成员函数是非静态的
******************************************************************************************
******************************************************************************************
******************************************************************************************
帮助文档的制作:
开始时候:首先是 /** */ 里面写 @author作者 @version版本号
制作该类的帮助文档,以便于使用该类中的功能。
:/> javadoc -d toolhelp -author -version ArrayTool.java
*/
/**
这个类使用操作数组的工具类,里面提供了很多的静态的功能,如:排序,获取最大值等。
@author 张三
@version V1.0
*/
public class ArrayTool
{
private ArrayTool(){}//不让其他程序创建该类对象
/**
对int类型的数组进行排序。从小到大。
@param arr 接收一个int类型的数组。
*/
public static void sort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
/**
将int数组转换成字符串。
@param arr 接收一个int类型的数组。
@return 返回该数组的对应的字符串,格式:[元素1, 元素2, ...]
*/
public static String arrToString(int[] arr)
{
String str = "[";
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
str = str + arr[x]+", ";
else
str = str + arr[x] + "]";
}
return str;
}
/*
给数组进行换位操作。
*/
private static void swap(int[] arr,int x,int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
/**
获取数组中的最大值。
@param arr 接收一个int类型的数组。
@return 该数组中的最大值。
*/
public static int getMax(int[] arr)
{
int max = 0;
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
}
:/> javadoc -d toolhelp -author -version ArrayTool.java
*/
******************************************************************************************
******************************************************************************************
******************************************************************************************
静态代码块:格式为:static{code......;}
当类在加载金内存时,如果需要进行一些内容的执行的时候,完成一个类的初始化,就需要使用静态代
码块来完成给类初始化
执行特点:当类被加载时,静态代码块就执行了,而且只执行一次,而且优先于main函数执行
静态代码块,构造代码块,构造函数
******************************************************************************************
******************************************************************************************
设计模式:重点掌握:
设计模式:就是解决问题最行之有效的解决方案,设计模式是一种思想。
Java中总结出23种设计模式。
单例设计模式:
解决的问题是:保证一个类在内存中只存在一个对象
简单说,就是保证类的唯一性
应用场景:比如A,B都要使用配置文件对象,希望A对配置数据修改后,B可以之间使用,那么就需要A程
序跟B程序使用的是同一个对象。
如何保证一个类在内存中的唯一性呢?
1.为了控制该类的对象建立,不让其他程序建立该类对象。
2.在本类中自定义一个本类对象
3.对外提供获取该对象的方式即可。
代码如何实现呢? (***********)
1.可以将构造函数私有化,这样对方程序创建就无法初始化,已达到不允许,其他程序创建对象的目的
2.在本类中,通过new创建一个本类对象
3.提供一个公共的方法返回该对象,方便与其他城西获取对象。
另外的一种表现形式:(饿汉式)(*******)
对象的延迟加载方式: (弊端:当并发访问getinstance方法时,容易出现安全隐患(线程安全隐患)
)(懒汉式)(*******)
******************************************************************************************
饿汉 class single
{ private static single a =new single();
private single(){}
public static single getintance(){return s;}
}
******************************************************************************************
懒汉 class single
{
private static single s =null ; //类一进内存成员值 为null,当用这个对象的时候再创
建这个类,为延迟加载,
private single(){};
public static single getintance()
{
if(s==null)
s=new single();
return s;
}
******************************************************************************************
******************************************************************************************
相关文章推荐
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- java基础--静态(函数、代码块)、单例设计模式、继承、final修饰符
- java设计模式之代理模式 (静态&动态)
- C#&&Java-----C#中和Java中把主函数定义成静态成员函数的原因
- Java笔记2 面向对象<2>static关键字、main函数、静态运用、单例设计模式
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
- Android的开发之&java23中设计模式------>外观模式
- 23种设计模式详解(Java示例)->适用于所有OO语言
- 【java学习笔记s】设计模式--静态代理
- 设计模式之静态代理&动态代理
- java 设计模式 代理 静态和动态
- java代理设计模式(静态代理与动态代理)
- JAVA设计模式(12) —<结构型>享元模式(Flyweight)
- 黑马程序员_静态方法,java文档制作和单例设计模式
- Java学习笔记15 单例设计模式(Sin…
- 设计模式之观察者模式(有源码简单实现及java函数简单实现)
- 【黑马程序员】java1.5新特性-----可变参数,静态导入,高级for循环及享元设计模式
- JAVA设计模式--代理模式(静态)
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
- C++静态成员函数设计