JAVA基础(50)---静态方法和静态代码块

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yj201711/article/details/84075116

静态方法

                      用static修饰的方法。静态的属性也称类变量,静态的方法称为类方法。

静态方法什么时候使用

  • 类属性作为该类各个对象之间共享的变量,在设计类时,分析哪些类属性不因对象的 改变而改变,将这些属性设置为类属性,相应的方法设置为类方法。
  • 如果方法和调用者无关,则这样的方通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。

静态方法和静态变量一样,属于类所有,在类加载的同时执行,不属于某个具体的对象,所有对象均能调用,对于静态方法需要注意以下几点:

  • 它们仅能调用其它的static的方法
  • 它们只能访问static数据
  • 它们不能以任何方式引用this或super

静态方法的使用的注意事项

  1. 在静态的方法中,只能使用静态的变量,不能使用非静态的变量
  2.  静态方法只能调用静态的方法,不能调用非静态的方法
  3.  非静态可以访问静态的,而静态的不能访问非静态的    

在静态中不能使用this

静态方法,一般用于声明工具类中的方法。可以直接拿类名调用工具方法进行使用。比如:在Java中,对于数组的操做,比较频繁,有一些方法是所有数组共有的一些操作排序,在数组中去查找某一个特定的元素 打印数组的元素等。

数组操作的工具类:Arrays

在Arrays这个工具类中,使用二分搜索法,查找一个元素的时候:这个数组必须是经过排序

import java.util.Arrays;

public class ArrayTest {
	
	public static void main(String[] args) {
		int[] arr = {2,3,6,7,1,4};
		int serchResult = Arrays.binarySearch(arr, 4);
		Arrays.sort(arr);
		
		for(int i = 0 ; i < arr.length;i++) {
			
			System.out.println(arr[i]);
		}
		System.out.println(serchResult);
	}
}

静态方法与普通方法

  • 静态方法中不可直接调用非静态方法,但是非静态方法中,可以直接调用静态的。
  • 静态方法可以调用静态成员变量,调用普通成员变量时需要创建对象;非静态方法可以随意调用静态成员变量或普通成员变量。
  • 静态方法和普通方法调用特性同上,静态调用普通方法时需要创建对象,而普通方法随意

 

静态代码块

                                               static{

                                               }

public class StaticBlock {
	public static void main(String[] args) {
		/*String schoolName = Student.getSchoolName();
		System.out.println(schoolName);*/
		Student stu = new Student();
		Student stu1 = new Student("张三",23);
	}
}

class Student {
	private String name ="";
	private int age;
	private static String schoolName ="太原师院";
	
	static{
		schoolName ="太原师范学院";
		System.out.println("静态代码块执行");
		
	}
	{
		System.out.println("构造代码块执行");
		
	}
	public Student() {
		System.out.println("无参构造执行");
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("带参构造执行");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public static String getSchoolName() {
		return schoolName;
	}

	public static void setSchoolName(String schoolName) {
		Student.schoolName = schoolName;
	}

}

    静态代码块(无论创建多少个对象,只执行一次) --》构造代码块(随着对象的创建而执行,执行的次数,与创建对象的个数相同)--》构造方法 

静态变量(类变量/类属性)的初始化

  1. 在声明变量的时候可以进行初始化
  2. 在静态代码块中对其进行初始化

什么情况下我们要使用static呢?

  1. 只想用一个存储区域来保存一个特定的数据——无论要创建多少个对象,甚至根本不创建对象。
  2. 我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法。(常用在工具类中)

静态变量和成员变量的区别

  • 内存分配。静态静态,就是当类被加载时,这个内存就静静的待在这里,就已经存在,而普通成员变量,只有类被实例化时才分配内存。
  • 调用方法。成员变量需要对象才能被调用;而静态成员变量可以直接通过类来调用,当然也可以直接调用
  • 生命周期。静态成员变量从类被加载开始到类被卸载,一直存在;普通成员变量只要在类被实例化也就是创建对象是才开始存在,一直到对象结束,生命也告终。
  • 共享方式。静态成员变量是全类共享的,即使不是对象,也可以调用,并且内存不变;普通成员变量是每个对象单独享用的,就是说你这个对象有一个 int i=1 ,我再给该类创建一个新的对象,他也有一个 int i ,但他可以不等于1,可以等于5,也可以等于10,但无论等于多少,都不会影响之前对象的i的值,而静态成员变量不是这样。

static对性能的影响

为什么说 static块 可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。static final 用来修饰成员变量和成员方法,可简单理解为“全局常量”, 常量必须要加static关键字修饰。

static 就是静态变量,声明为 static 的变量实质上就是全局变量,如果一个成员被声明为 static ,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象!

static的优点

  1. 一个静态属性在堆内存只能存在一个,即大家可以共享该属性值。
  2. 如果一个对象数组中其中的某个属性大家都是相同的,即可以使用静态,这样可以节省内存空间。
  3. 静态一旦创建,生命周期就会从创建开始到该程序结束才会死亡。
  4. 静态依赖于类,而不是对象。

为什么main方法是静态的?而且是public static

public,访问权限大;static,main方法访问时候没有对象,是程序一启动就访问的,所以它是静态的。

展开阅读全文

没有更多推荐了,返回首页