java基础4(static、super与this、final)

倾然丶 夕夏残阳落幕 提交于 2020-03-05 16:19:26

一.static

用来修饰的成员变量和成员方法
被修饰的成员是属于类,而不是单单是属 于某个对象的。
既然属于类,就可以不靠创建对象来调用了

1.1 定义和使用

1.1.1.类变量

修饰的成员变量
static 数据类型 变量名;

public class Student { 
	private String name; 
	private int age; 
	// 学生的id
	private int sid; 
	// 类变量,记录学生数量,分配学号 
	public static int numberOfStudent = 0; 
	public Student(String name, int age){ 
		 this.name = name; 
		 this.age = age;
		 // 通过 numberOfStudent 给学生分配学号
		  this.sid = ++numberOfStudent; 
  }
  // 打印属性值 
  public void show() { 
  		System.out.println("Student : name=" + name + ", age=" + age + ", sid=" + sid );
 	  } 
  }
public class StuDemo { 
		public static void main(String[] args) { 
			 Student s1 = new Student("张三", 23); 
			 Student s2 = new Student("李四", 24); 
			 Student s3 = new Student("王五", 25);
			 Student s4 = new Student("赵六", 26); 
			 s1.show(); // Student : name=张三, age=23, sid=1 
			 s2.show(); // Student : name=李四, age=24, sid=2
			 s3.show(); // Student : name=王五, age=25, sid=3 
			 s4.show(); // Student : name=赵六, age=26, sid=4
		  }
  }

1.1.2.静态方法

静态方法在声明中有 static ,建议使用类名来调用,而不需要创建类的对象。
修饰符 static 返回值类型 方法名 (参数列表){
// 执行语句
}

public static void showNum() {
	 System.out.println("num:" + numberOfStudent); 
 }

静态方法调用的注意事项:
静态方法可以直接访问静态变量和静态方法。
静态方法不能直接访问普通成员变量或成员方法。
反之,成员方法可以直接访问静态变量或静态方法。
静态方法中,不能使用this关键字。
静态方法只能访问静态成员。

1.1.3.调用格式

访问类变量
类名.类变量名;
调用静态方法
类名.静态方法名(参数);

public class StuDemo2 { 
	public static void main(String[] args) { 
		// 访问类变量 
		System.out.println(Student.numberOfStudent);
		 // 调用静态方法 
		 Student.showNum(); 
		 } 
}

static 修饰的内容
随着类的加载而加载的,且只加载一次。
存储于一块固定的内存区域(静态区),可以直接被类名调用。
它优先于对象存在,可以被所有对象共享。

二. super、this

访问的成员
this.成员变量 ‐‐ 本类的
super.成员变量 ‐‐ 父类的
this.成员方法名() ‐‐ 本类的
super.成员方法名() ‐‐ 父类的

三. final

不可改变。可以用于修饰类、方法和变量。(相当于太监)

3.1.修饰的类

被修饰的类,不能被继承。
final class 类名 {
}

3.2 修饰的方法

被修饰的方法,不能被重写。
修饰符 final 返回值类型 方法名(参数列表){
//方法体
}

3.2 修饰的变量

`修饰符 final 返回值类型 方法名(参数列表){ `
	`//方法体`
`}`

3.2.1 局部变量——基本类型

基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改

public class FinalDemo1 { 
	public static void main(String[] args) { 
		// 声明变量,使用final修饰 
		final int a;
		a = 10;  // 第一次赋值 
		 a = 20;  // 第二次赋值  报错,不可重新赋值 
		// 声明变量,直接赋值,使用final修饰 
		final int b = 10;
	   // 第二次赋值 
	 	 b = 20; // 报错,不可重新赋值 
	  }
 }

3.2.2 局部变量——引用类型

引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。
但是不影响对象内部的成员变量值的修改

public class FinalDemo2 { 
	public static void main(String[] args) {
		 // 创建 User 对象 
		 final User u = new User(); 
		 // 创建 另一个 User对象 
		 u = new User(); // 报错,指向了新的对象,地址值改变。 
		 // 调用setName方法
		  u.setName("张三"); // 可以修改
	 } 
}

被final修饰的常量名称,一般都有书写规范,所有字母都大写。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!