static
Static
首先static无规定private还是public ,默认为default的形式,一般public可以跨类跨包,private只能由对象本身访问,而protected可以在本类和子类下跨包,default可以实现同一个包内可以访问。成员方法可以访问静态和非静态静态方法只可以访问静态,而且静态方法中不能使用this关键字,因为静态根本就跟对象无关,所以与this也没有什么关系。
而且一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。!!对于本来当中的静态方法,可以省略类名称,无论是成员变量,还是成员方法。如果有了static,都推荐使用类名称进行调用。
静态变量:类名称.静态变量
静态方法:类名称.静态方法()
如果一个函数没有直接访问到非静态的成员时,那么就可以使用static修饰了。 一般用于工具类型的方法, 静态函数只要存在有对象,那么也可以访问非静态的数据。只是不能直接访问而已。
那么static具有什么特点呢?
1 随着类的加载而加载,静态会随着类的加载而加载,随着类的消失而消失。说明它的生命周期很长。
2 优先于对象存在。-->静态是先存在,对象是后存在。
3 被所有实例(对象)所共享。
4 可以直接被类名调用
二. 关于子方法static去掉的报错(求平方数的静方法)的原因
当去掉static时变为了非静态方法,需要在主函数中new一个新对象才能进行调用,不然无法进行调用,添加SquareInt Sq=new SquareInt(); result = Sq.square(x);来进行调用。代码如下,
public class SquareInt {
public static void main(String[] args) {
SquareInt Sq=new SquareInt();
int result;
for (int x = 1; x <= 10; x++) {
result = Sq.square(x);
// Math库中也提供了求平方数的方法
// result=(int)Math.pow(x,2);
System.out.println("The square of " + x + " is " + result + "\n");
}
}
// 自定义求平方数的静态方法
public int square(int y) {
return y * y;
}
}