java static关键字

1.static关键字可以用于定义属性及方法.
在类中,主要组成就是属性和方法(分为构造方法与普通方法),而每一个对象都分别拥有各自的属性内容(不同对象的属性保存在不同的堆内存中),如果现在类的某个属性希望定义为公共属性(所有对象都可以使用的属性)则在声明属性前加上static关键字.

java中主要存在四块空间:
1.栈内存空间:保存所有对象名称(准确说是保存了引用的对内存空间的地址)
2.堆内存空间:保存每个对象的具体属性内容
3.全局数据区:保存static类型的属性
4.全局代码:保存所有方法定义

使用static定义属性
static属性保存在全局数据中,所以现在如果有一个对象修改了country属性内容,会影响其他country属性内容.
在这里插入图片描述
运行结果
可以看到在定义country属性,增加了static关键字,所以当在主类中某个对象修改了country属性内容后,所有对象的country属性全都改变了.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVYFWxF0-1580783394642)(h如果ttps://img-blog.csdnimg.cn/20200204101730484.png)]

2.使用了static定义属性表公共属性,现在由某一个对象修改是不合适的,应该由所有对象的公共代表—类进行操作,即static属性最好直接通过类名称来进行调用,使用"类名称.属性"的方式来完成

下面的代码
在类中country属性直接利用了类名称完成调用,并且没有任何实列化对象进行static属性调用.
在这里插入图片描述
运行结果
在这里插入图片描述

以上代码可以知道:
1.使用static定义属性不在堆内存中保存,而是保存在全局数据区;
2.使用static定义的属性表示类属性,类属性可以由类名称直接调用;
3.static属性虽然定义在了类中,但是其可以在没有实列化对象进行调用(普通属性保存在对内存里,而static属性保存在全局数据区中).
在程序中,大部分情况是普通属性,而不是static属性.

3.使用static定义方法
在定义普通方法时也可以使用static进行定义,使用static定义的方法也可以在没有实列化对象产生的情况下由类名称直接调用.
定义属性country使用了关键字static关键字定义,将属性封装,而在外部操作country属性使用了static定义两个方法完成,可以发现static方法也可以通过类名称调用.没有实列化依然可以使用
在这里插入图片描述
运行结果
在这里插入图片描述
4.方法调用问题
类中的普通方法实际上分为两种:static方法和非static方法,这两类方法直接调用存在如下限制:
1.static定义的方法不能调用非static的方法或属性.
2.非static定义的方法可以调用static的属性或方法.
原因如下:
1.使用static定义的属性和方法,可以在没有实列化对象的时候使用;
2.非static定义的属性和方法,必须实列化对象后才可以进行调用.

5.主方法
如果一个方法在主方法中定义,由主方法直接调用时,必须由public static ,如下:

public static 返回值类型 方法名称(参数列表){
       [return [返回值];]
}

下面代码此时表示的是一个static方法调用其他的static方法,但是这个时候print()方法没有static呢,必须要使用实列化对象来调用非static方法,即所有的非static方法几乎都有一个特点**:方法由实列化对象调用.**

public class TestDemo{
         public static void main(String args[]){     //static方法
         print();          //直接调用
         }
         public static void print(){               //static方法
         System.out.println("Hello World.")}
         }

运行结果
Hello World.

在平时开发中并没有强调static关键字,对于主类只是编写一个主方法,定义static的情况也是不多见,大部分定义方法都应该是非static型的.我们观察主方法组成,可以知道有很多关键字组成.
public:是一种访问权限,表示公共;
static:此方法由类名直接调用,执行类:java类名称:
void:主方法是一切的开始,没有返回值.
main:系统规定的一个方法名称,执行类的时候默认找到此名称.
String args[]:表示的是一些运行参数,通过字符串接收.

6.static关键字的使用
使用static关键字定义属性或方法原因有二.
1.希望在没有实列化对象时可以轻松地执行类地某些操作;
2.现在希望表示出数据共享概念.

统计一个类产生地实列化对象个数
一个类可以有多个实列化对象产生,现在想增加一个统计操作,可以统计出一个类中所产生地实列化对象个数,现在要产生新的实列化对象,则一定会调用类中的构造方法,所以可以在构造方法中增加统计,统计变量应该时所以对象共享的,那么应该将其定义为static.
在这里插入图片描述
结果
在这里插入图片描述

为类属性自带命名
在类中可能会有多个构造方法,假设类中存在一个name属性,要求这个属性一定要有内容,如果用户调用了无参数构造方法,那么name也需要一个具体的内容体现,可以利用static完成.
在这里插入图片描述
运行结果
采用匿名对象方式,实例化对象之后立刻调用了getTitle()方法取得了设置的title属性内容.可以发现每一个title属性都会存在内容.
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值