static关键字

本文详细介绍了Java中static关键字的用途及其对属性和方法的影响。包括如何声明公共属性、类属性的概念、静态方法的调用限制及其实例,以及static在统计记录和对象自动命名中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在java里面,static可以定义属性和方法
class Student{
private String name;
private int age;
String shool="清华大学";
public Student(String name,int age) {
this.name=name;
this.age=age;
}
public String getInfo() {
return "姓名:"+this.name+", 年龄:"+this.age+", 学校:"+this.shool;
}
}
public class Statica {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stuA=new Student("张三",30);
Student stuB=new Student("李四",31);
Student stuC=new Student("王五",32);

stuA.shool="北京大学";

                  // Student.shool="北京大学";

System.out.println(stuA.getInfo());
System.out.println(stuB.getInfo());
System.out.println(stuC.getInfo());
}
}

在这种情况下就可以使用static关键字来声明,即使用static关键字声明的属性就是公共属性

//使用static属性修改
class Student{
private String name;
private int age;
static String shool="清华大学";
public Student(String name,int age) {
this.name=name;
this.age=age;
}
public String getInfo() {
return "姓名:"+this.name+", 年龄:"+this.age+", 学校:"+this.shool;
}
}
public class Statica {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stuA=new Student("张三",30);
Student stuB=new Student("李四",31);
Student stuC=new Student("王五",32);
stuA.shool="北京大学";
System.out.println(stuA.getInfo());
System.out.println(stuB.getInfo());
System.out.println(stuC.getInfo());
}
}

得出一个结论:shool是公共属性,而此属性不再保存在堆内存之中,会保存在一个称为“全局数据区”的内存区域。

所有对象的最高代表就是类,那么一般使用static定义的属性往往通过类名称直接调用。(Student.shool="北京大学";)
stuA.shool="北京大学";
正是由于static存在这样的由类名称直接调用的特点,所以static属性又被称为“类属性”;而且static属性可以在一个类没有实例化对象的时候
可以进行访问。

使用static定义方法

使用static定义的方法也一定可以通过类名称直接访问,而且使用static定义的方法其主要就是为例操作static属性

package statica;
class Studenta{
private String name;
private int age;
private static String shool="清华大学";
public Studenta(String name,int age) {
this.name=name;
this.age=age;
}
public static String getShool() {
return shool;//没有加上this
}
public static void setShool(String sch)//名称不统一
{
shool=sch;//没有加上this
}
public String getInfo() {
return "姓名:"+this.name+", 年龄:"+this.age+", 学校:"+shool;
}
}
public class Staticb {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Studenta.getShool());
Studenta.setShool("北京大学");
Studenta stu=new Studenta("张三",20);
System.out.println(stu.getInfo());
}
}

static类方法调用上是由限制的:
使用static方法只能够调用static属性和static方法,不能够调用任何的非static操作
使用非static方法可以调用任意的static属性或static方法
思考:以上的限制只是语法的限制,通过实际道理分析以上问题?
首先static方法和非static方法调用的时机是不同的,static方法可以由类名称直接调用,那么在调用的时候可以没有实例化对象产生
而非static方法,必须在由实例化对象产生之后才可以调用(对象实例化之后产生开辟堆内存空间,在堆内存空间之中要保存属性的信息)

只有在一种情况下会选择定义static方法:如果一个类之中没有任何的属性存在,那么就可以考虑将所有的方法都定义为static方法

主方法:
如果现在一个方法定义在主类之中,并且由主方法直接调用
则方法定义如下:
public static 返回值类型 方法名称(参数列表){
{return 【返回值】; }
}

public class staticc {
public static void main(String[] args) {
// TODO Auto-generated method stub
fun();
}
public static void fun() {
System.out.println("hello");
}
}



public class Staticc {
public static void main(String[] args) {
// TODO Auto-generated method stub
//fun();
new Staticc().fun();
}
public  void fun() {
System.out.println("hello");
}


}
public:这是一种权限,表示公共的,都可以访问
static:表示此方法可以由类名称直接调用
void:主方法是一切的开始,开头了就没回头路
main();是一个系统默认定义好的方法名称,使用java解释类的时候默认找到此名称
String args[]:接收的参数

static的使用
一:作为统计记录使用
package statica;
class Person
{
private static int count=0;
public Person() {
System.out.println("Person对象个数:"+ ++count);
}
}
public class Statice {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Person();new Person();new Person();
new Person();new Person();new Person();
}


}
二:实现对象的自动命名
package statica;
class Persona{
private static int count=0;
private String name;
public Persona()
{
this("无名氏-"+ count++);
}
public Persona(String name) {
this.name=name;
}
public String getName() {
return this.name;
}
}
public class Staticf {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Persona().getName());
System.out.println(new Persona("张三").getName());
System.out.println(new Persona().getName());
}


}
意义不大,了解;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值