1、static关键字
static变量特点:
A、随着类的加载而加载(在类定义定义对象前就存在),随着类的消失而消失(生命周期最长)。
B、在类定义定义对象前就存在。
C、被所有对象共享。
D、可以直接被类名调用。
实例对象和类变量的区别:
A、存放位置
类变量随着类的加载而存放在方法区中;实例变量随着对象的建立存放在堆内存中。
B、生命周期
类变量生命周期最长,随着类的消失而消失;实例变量随着对象的消失而消失。
静态使用注意事项:
A、静态方法只能访问静态成员。
B、静态方法不可以定义this\super关键字。
C、主函数是static。
静态利弊:
利处:对对象的共享数据进行单独空间的存储,节省空间。
弊处:生命周期过长。访问只能访问静态变量。
class Person1{
String name;
static String country="CN";
public static void show(){
System.out.println(country);
}
public static void ha(){
}
}
public class StaticDemo {
public static void main(String[] args){
Person1.show();
}
}
2、main函数
public:表示访问权限最大,jvm可以访问。
static:表示类加载的时候就存在了。
void:没有返回值,jvm不需要返回值。
main:方法名称,jvm就调用此方法。
3、静态什么时候使用
静态变量:当对象中有共享数据值。
静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
public class Person{
String name;
public static void show(){
System.out.println(name);//没有访问对象的特有数据
}
}
4、静态的应用(工具类)
每一个应用程序中都有共性的功能,可以将这些功能打包在一个类中,进行复用。
A、将类中的方法定义为静态的,用类名.函数名进行调用。
B、将方法都静态后可以方便使用,但是该类还可以被调用建立对象,可以将构造函数private。
class ArrayTool{
//将构造函数私有化
private ArrayTool(){}
public static int getMax(int[] arr){
int max = 0;
for(int i=1;i<arr.length;i++){
if(arr[i]>arr[max]){
max = i;
}
}
return arr[max];
}
public static int getMin(int[] arr){
int min = 0;
for(int i=1;i<arr.length;i++){
if(arr[i]>arr[min]){
min = i;
}
}
return arr[min];
}
public void selectSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
swap(arr,x,y);
}
}
}
public void bubbleSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++){
if(arr[y]>arr[y+1]){
swap(arr,y,y+1);
}
}
}
}
private void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
5、帮助文档的制作javadoc
A、类为public
B、文档只提供public;不提供protected、private类型的范围
C、javadoc -d help(doc放置的目录) -author -version ArrayTool.java
D、API:application program interface
/**
* @description 这是一个可以对数组进行操作的工具类,包含查找数组中的最大值、最小值、排序。
* @date 2013-5-15 上午8:38:29
* @author luxiangzhou
* @version V1.0
*/
public class ArrayTool{
//将构造函数私有化
private ArrayTool(){}
/**
* @param arr 接收一个int类型的数组
* @return 返回一个数组中最大值
*/
static int getMax(int[] arr){
int max = 0;
for(int i=1;i<arr.length;i++){
if(arr[i]>arr[max]){
max = i;
}
}
return arr[max];
}
/**
* @param arr 接收一个int类型的数组
* return 返回一个数组中最小值
* */
public static int getMin(int[] arr){
int min = 0;
for(int i=1;i<arr.length;i++){
if(arr[i]>arr[min]){
min = i;
}
}
return arr[min];
}
/**
* @param arr 拍戏
* */
public static void selectSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
swap(arr,x,y);
}
}
}
/**
* @param arr 排序
* */
public static void bubbleSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-x-1;y++){
if(arr[y]>arr[y+1]){
swap(arr,y,y+1);
}
}
}
}
private void swap(int[] arr,int a,int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
一个类中的默认会有一个构造函数,这个构造函数的权限与所属类一致,如果类被public修饰,那么默认的构造函数权限也为public;如果类没有被public修饰,则默认的构造函数也没有被public修饰。
6、静态代码块
静态代码块随着类的加载而加载,且只执行一次,并优先于主函数执行。
class StaticTest01{
//静态变量,内加载
private static int num = 1;
//静态代码块,类加载
static{
System.out.println("1");
}
//构造代码块,对象加载
{
System.out.println("2");
}
//构造函数,对象加载
public StaticTest01(){
System.out.println("3");
}
}
public class StaticDemo01 {
public static void main(String[] args){
new StaticTest01();
}
}
总结:
1、代码执行顺序:静态代码块---构造块---构造函数;
2、工具类中一般定义静态权限函数,且构造函数权限为private
3、制作java帮助文档javadoc:javadoc -d 目录名 -author -version 源文件.java