JavaSE-07 【static-final】
第一章 static关键字
1.1 静态static关键字概述
- static关键字
- 一个类的不同对象有些共享的数据,这样我们就可以使用static来修饰 。
- 一旦使用了static关键字,那么这样的内容不再属于对象,而是属于类的,
- 凡是本类的对象,都共享同一份。
- static可以用来修饰成员变量,修饰成员方法,以及静态代码块
1.2 静态static关键字修饰成员变量
- static修饰成员变量
- 1、static修饰成员变量,那么此变量就不属于对象,而是属于所在的类
- 2、本类的多个对象共享此变量
- 3、调用方式:可以使用对象名调用,也可以使用类名调用
- 4、推荐使用 类名.静态属性名调用。不推荐使用对象名调用
/**
* 1、模板类
*/
public class Student {
private String name;
private int age;
public static String address;//定义静态变量
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
/**
* static修饰成员变量
* 1、static修饰成员变量,那么此变量就不属于对象,而是属于所在的类
* 2、本类的多个对象共享此变量
*/
public class TestStaticFiled {
public static void main(String[] args) {
//创建对象
Student s1 = new Student("Tom", 22);
//设置静态变量的属性值
s1.address = "迈阿密";
//获取对象的属性值
System.out.println(s1.getName()+" : "+s1.getAge()+"岁, 来自: "+s1.address);
//创建对象
Student s2 = new Student("Anny", 19);
//获取对象的属性值
System.out.println(s2.getName()+" : "+s2.getAge()+"岁, 来自: "+s2.address);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CQ7iwc0S-1686187990707)(photo/JavaSE07_static和final.assest/1664898331639.png)]
1.3 静态static关键字修饰成员方法
- static修饰成员方法
- 1、使用static修饰成员方法,那么方法就成为静态方法
- 2、静态方法不属于对象,属于类
- 3、调用方式:类名称.方法名();
- 4、推荐使用类名.静态方法名调用。不推荐使用对象名调用
- 5、对于本类中的静态方法之间的调用,可以省略类名称
- 注意事项:
- 1、静态只能调用静态,不能调用费静态
- 2、非静态可以访问静态
- 3、原因:在内存中,先有的静态内容,后有的非静态内容。后可以访问先,先不能访问后
- 4、静态方法中不能使用this
public class Person {
//成员方法
public void method1(){
System.out.println("普通成员方法");
}
//静态成员方法
public static void staticMethod(){
System.out.println("静态成员方法");
}
}
/**
* static修饰成员方法
* 1、使用static修饰成员方法,那么方法就成为静态方法
* 2、静态方法不属于对象,属于类
* 3、调用方式:类名称.方法名();
* 4、推荐使用类名.静态方法名调用。不推荐使用对象名调用
* 5、对于本类中的静态方法之间的调用,可以省略类名称
*/
public class TestStaticMethod {
public static void main(String[] args) {
//创建Person对象
Person p = new Person();
//对象调用普通方法
p.method1();
//对于静态方法,可以通过对象名进行调用,也可以通过类名调用成员方法
p.staticMethod();//不推荐
Person.staticMethod();//推荐
//对于本类中的静态方法之间的调用,可以省略类名称
methodA();
}
public static void methodA(){
System.out.println("AAAAA");
}
}
1.4 静态static的内存图
在内存图的方法区当中,有一块独立的空间,叫静态区,专门用来存储静态static的数据。
根据类名称访问静态成员变量的时候,全程和对象没有任何关系。
1.5 静态代码块
- 格式:
static{
//静态代码块的内容
}
- 特点
- 1、当类加载的时候,静态代码块一起加载,且只执行一次
- 2、静态优先于非静态,所以静态代码块优先于构造方法执行
- 3、一般用来一次性的对静态成员变量进行赋值
public class User {
//静态代码块
static {
System.out.println("静态代码块执行了");
}
//无参构造方法
public User() {
System.out.println("无参构造执行了");
}
}
/**
* 静态代码块
* 格式:
* static{
* //静态代码块的内容
* }
* 特点:
* 1、当类加载的时候,静态代码块一起加载,且只执行一次
* 2、静态优先于非静态,所以静态代码块优先于构造方法执行
* 3、一般用来一次性的对静态成员变量进行赋值
*/
public class TestStaticCodeDiv {
public static void main(String[] args) {
User user1 = new User();
User user2 = new User();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jbH13ypt-1686187990708)(photo/JavaSE07_static和final.assest/1664900426184.png)]
第二章 final关键字
2.1 final关键字的概念
- 定义:final表示最终的,不可改变的
2.2 final的四种用法
- 四种用法:
- 1、用于修饰类 : final修饰的类不能被继承
- 2、用于修饰方法:
- final修饰的方法不能被重写
- final不能和abstract关键字一起使用,因为两者矛盾
- 3、用于修饰局部变量
- final修饰局部变量不可被修改
- 对于基本类型来说:final修饰的局部变量不可变的是其数据值
- 对于引用数据类型:final修饰的局部变量不可变的是地址值
- 4、用于修饰成员变量
- fianl修饰成员变量,那么这个变量也是不可变的
- 1、由于成员变量有默认值,所以使用final关键字之后,必须手动赋值。不会再给默认值
- 2、对于final修饰的成员变量,要么直接赋值,要么使用构造方法赋值
:final修饰的局部变量不可变的是其数据值
- 对于引用数据类型:final修饰的局部变量不可变的是地址值
- 4、用于修饰成员变量
- fianl修饰成员变量,那么这个变量也是不可变的
- 1、由于成员变量有默认值,所以使用final关键字之后,必须手动赋值。不会再给默认值
- 2、对于final修饰的成员变量,要么直接赋值,要么使用构造方法赋值