java的static关键字和c/c++语言的关键字有所不同:
一旦在java里使用了static关键字,那么这样的内容不再属于对象自己,而是属于类本身的,所以凡是本类的对象,都共享一份。
1、使用java static关键字修饰成员变量
以下是stundent类。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package app_one;
public class student {
private int id = 0 ;
private int age = 0 ;
private string name = null ;
static int id_count = 0 ;
public student( int age , string name)
{
this .age = age ;
this .name = name ;
this .id = ++id_count ;
}
public int getage() {
return age;
}
public void setage( int age) {
this .age = age;
}
public string getname() {
return name;
}
public void setname(string name) {
this .name = name;
}
}
|
以下是主类:
1
2
3
4
5
6
7
8
9
10
11
12
|
package app_one;
public class hello {
public static void main(string[] args)
{
student st1 = new student( 14 , "小明" );
system.out.println( "年龄:" + st1.getage() + " 姓名:" + st1.getname() + " 序号:" + student.id_count);
student st2 = new student( 15 , "小红" );
system.out.println( "年龄:" + st2.getage() + " 姓名:" + st2.getname() + " 序号:" + student.id_count);
student st3 = new student( 18 , "小李" );
system.out.println( "年龄:" + st3.getage() + " 姓名:" + st3.getname() + " 序号:" + student.id_count);
}
}
|
运行结果:
从上面的案例可以看到,id_count是可以自动进行计数的,每一次实例化student类的时候,id_count就自动+1,然后赋值给成员变量id,由于定义了static关键字的变量不再属于对象,而是属于类,所以在访问的时候,我们可以用类名称().静态变量的形式来进行访问。
2、使用static修饰成员方法
将上述程序中student类的id_count修改为私有的静态变量,并添加一个静态的get_idcount方法。
1
2
3
4
5
|
private static int id_count = 0 ;
public static int get_idcount()
{
return id_count ;
}
|
在主类中获取id_count不通过类.变量的方式获取,而是改为类.方法()的方式获取。
student.get_idcount()
强调两点:
①
- (1)成员方法可以访问成员变量
- (2)成员方法可以访问静态变量
- (3)静态方法可以访问静态变量
- (4)静态方法不可以访问成员变量(非静态)
原因:因为在内存中是先有的静态内容,后有的非静态内容
②
- (1)静态方法当中不能使用this
原因:因为this代表当前对象,通过谁调用的方法,谁就是当前对象
小结:
一旦使用了static修饰成员方法,那么这就成为了静态方法,不属于对象,而是属于类本身的。
对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用。
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它
如果有了static关键字,那么不需要创建对象,直接就能通过类名称进行调用。
无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称进行调用。
静态变量:类名称.静态变量
静态方法:类名称.静态方法();
对于本类中的静态方法,可以省略类名称。
3、静态static的内存图
参照学习传智的java课程给出的图,清晰易懂。
4、静态代码块
静态代码块格式:
1
2
3
4
5
6
|
public class 类名称{
static
{
//静态代码块的内容
}
}
|
- (1)特点:当第一次用到本类时,静态代码块执行唯一的一次,静态内容总是优先于非静态,所以静态代码块比构造方法先执行
- (2)典型用途:用来一次性地对静态成员变量进行赋值。
针对上面的案例做修改,在student类中添加一个静态代码块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
package app_one;
public class student {
private int id = 0 ;
private int age = 0 ;
private string name = null ;
private static int id_count = 0 ;
static
{
system.out.println( "静态代码块运行!" );
}
public student( int age , string name)
{
system.out.println( "构造方法运行!" );
this .age = age ;
this .name = name ;
this .id = ++id_count ;
}
public int getage() {
return age;
}
public void setage( int age) {
this .age = age;
}
public string getname() {
return name;
}
public void setname(string name) {
this .name = name;
}
public static int get_idcount()
{
return id_count ;
}
}
|
然后主程序修改如下:
1
2
3
4
5
6
7
8
9
10
|
package app_one;
public class hello {
public static void main(string[] args)
{
student st1 = new student( 14 , "小红" );
system.out.println( "姓名: " +st1.getname() + " 年龄: " + st1.getage() + " 序号: " +student.get_idcount());
student st2 = new student( 14 , "小李" );
system.out.println( "姓名: " +st2.getname() + " 年龄: " + st2.getage() + " 序号: " +student.get_idcount());
}
}
|
运行结果:
很明显得出结论。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/morixinguan/article/details/84982486