Java基础之static,final关键字

1.static关键字

static:静态的。
static修饰的东西和对象无关!!!

1.1生活中静态的东西

如公共资源。可以使用,但和使用者本身没有关系

1.2Java中的静态
1.2.1static修饰成员变量

静态属性,如 static String name;
语法格式: static 数据类型 变量名;
静态属性的调用(在主函数main中):
​ 赋值:类名.静态属性名 = 值
取值:类名.静态属性名

代码示例1:

class Person {
	String name;
	int age;
	static String country; // 注意:静态属性名字是斜体
}
public class Demo1 {
	public static void main(String[] args) {
		Person person = new Person();
		person.name = "张三";
		person.age = 23;
		Person.country = "中国"; //正确的调用方式
//		person.country = "PRC"; //不规范的调用方式,会有警告
		System.out.println(Person.country); //PRC。虽然不规范,但仍会覆盖原来的值		
	}
}

注意事项:

1.使用static修饰的变量叫静态变量。
2.代码中对象还没创建时,只要加载了类,那么类中静态的属性已经存在于内存的方法区了,因为它和对象没有关系。
3.一个属性如果用static来修饰,那么在内存的方法区和堆区都会存在这个属性,且两者之间存在一个通道,这就是用类名调用和用对象调用时都会改变属性值的原因。

1.2.2static修饰成员方法

静态方法。
语法格式: public static 返回值 方法名(所需参数) { }
调用格式: ​类名.静态方法名(所需参数);

代码示例2:

class Dog {
	public void eat () {
		System.out.println("普通的成员方法");
	}
	public static void sleep () {
		System.out.println("静态方法");
	}
}
public class Demo2 {
	public static void main(String[] args) {
		//通过类名调用静态方法
        Dog.sleep();
        //普通成员方法需要通过对象来调用
		//Dog.eat();
		
        //在一般情况下,Demo2省略掉了,因为是在同一个类中定义并调用了这个静态方法
        Demo2.test();
	}
	public static void test () {
		System.out.println("嘻嘻");
	}
}
1.2.3static修饰代码块

静态代码块。
语法格式:
static {
//代码块
}
只要这个类加载了,那么静态代码块一定会执行
执行顺序:静态代码块 --> 构造代码块 --> 构造方法。

代码示例3:

class Cat {
	public Cat () {
		System.out.println("无参构造方法");
	}
	{
		System.out.println("构造代码块");
	}
	static {
		System.out.println("静态代码块");
	}
}
public class Demo4 {
	public static void main(String[] args) {
		Cat cat = new Cat();
		//静态代码块
		//构造代码块
		//无参构造方法
	}
}

2.final关键字

final:最终的,最后的。
1.final可以用来修饰成员变量 final String name;
使用final修饰的成员变量一定要先初始化(赋值),且一旦被赋值,无法改变。
2.final可以用来修饰局部变量
修饰局部变量时,可以先不赋值,之后再赋值。一旦被赋值,无法改变。
3.final可以用来修饰成员方法
使用final修饰的成员方法,无法被重写。
4.final可以用来修饰类
使用final修饰的类,不能被继承。
5.final可以修饰一个对象的引用
使用final修饰的对象引用,内存地址固定,不能再用另一个对象的引用对其进行赋值。

代码示例:

 class Person {
	 //final修饰类属性必须赋初始值
     //赋值之后无法改变
     final String name = "狗蛋";
	
	public void test () {
		//final修饰局部变量,可先不赋值
        final int i;
		i = 30;
		//i = 80; //报错,一旦被赋值,就无法改变
		System.out.println(i);
	}
	 public final void eat () {
		System.out.println("吃饭");
	}
}
public class Demo1 {
	public static void main(String[] args) {
		final Person person = new Person();
		System.out.println("Person:" + person);
		//一旦使用final修饰对象引用person,就是一个固定的内存地址
		Person person1 = new Person();
		System.out.println("Person1:"+ person1);
		//person.name = "嘻嘻";
		//person = person1;//将person1赋值给了person对象。报错,内存地址无法改变
		System.out.println(person);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值