浅议java中的final、static关键字

final可以修饰的对象有:

变量:被final修饰的变量称为常量,一旦被赋值,不能被改变。

方法:如果一个方法被final修饰,则说明该方法不能被子类覆盖。

类:如果一个类被final修饰,则说明该类不能被继承。


static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。


但是要注意的是,虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的。

想要对对象中相同的数据,来进行数据的共享,就可以对该变量进行修饰,修饰符为static。
被static所修饰的变量存放在方法区当中。
方法区存放的内容:
所有的对象都能共享的内容。又叫共享数据区。

static的关键:
1、被static修饰的成员变量,能够被所有的对象共享。
2、static的生命周期:随着类的加载而加载,随着类的消失而消失。
3、静态时优先于对象而存在的。
4、静态成员可以直接用类名进行调用,也可以用对象名调用。

静态存在时还没有对象,static内容需要被调用的话,此时只有类能完成。
所以建议用类名来调用静态成员。

静态数据:共有的,每个对象都有统一的数据,然后存在方法区当中。
特有数据:存放在对象当中的数据,存放在堆内存当中。

注意:
1、静态方法中只能直接调用静态成员。
          如果在静态方法中调用了非静态成员,那么非静态成员对用的数据或运算,就要找对象,但是静态成员是优先于对象而存在的,所有的静态方法都没有对象,也就无法使用非静态成员。
      非静态的方法既可以调用静态成员也可以调用非静态成员。
2、在静态方法中不允许出现this super关键字。
this就代表对象。静态当中没对象。

静态成员只能访问静态内容。 

静态变量和非静态变量之间的区别:
1、非静态变量又称为实例变量,静态变量又被称为类变量。
2、非静态成员变量随着对象的创建而存在,随着对象的消失而消失。
   静态成员变量是随着类的加载而加载,随着类的结束而消失。
3、非静态成员变量是存放在堆内存中的,
   静态成员变量是存放在方法区当中的。
4、非静态成员变量只能被对象调用,
   静态成员变量可以被类名调用,也可以被对象调用。

成员变量:
成员变量的值,如果每个对象都相同时,那么就用static修饰,被所有的对象共享。
成员函数:
当函数中访问到了对象中所特有的属性时,那么函数就不能被static修饰。

如果一个类中定义的方法都是静态的,这个类普遍称之为工具类。

静态代码块的特点:
1、随着类的加载而运行,只执行一次。
2、优先于主函数执行。

作用:给类进行初始化。

      如:如果类本身是不需要创建对象的,给类进行初始化就用静态代码块。


示例代码如下:

package com.basic.exercise;

public class Student {
	private String name;
	private String id;
	static String Country="中国";
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public static void study(){
		System.out.println("好好学习,天天向上!!!");
	}
	//非静态方法可以调用静态成员变量和成员函数
	public void show(){
		study();
		System.out.println(Country);
	}
}

package com.basic.exercise;

public class Test {
	static int x=0;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student stu1=new Student();
		Student stu2=new Student();
		//对象可以调用静态成员变量
		stu1.Country="美国";
		System.out.println(stu2.Country);
		System.out.println(Student.Country);
		show();
	}
	public static void show() {
		// TODO Auto-generated method stub
		
		//静态方法只能调用静态成员变量
		System.out.println("x="+x);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尚振伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值