JAVA基础(面向对象进阶) —— static

通过之前对 JAVA基础 —— 面向对象 以及 JAVA基础 —— 面向对象内存图 的学习。

接下来我们将会进一步学习面向对象进阶的相关知识点。

static JAVA基础 (面向对象进阶)—— Static
继承 JAVA基础 (面向对象进阶)—— 继承
多态 JAVA基础 (面向对象进阶)—— 多态
包、final、权限修饰符、代码块、抽象类和抽象方法方法 JAVA基础(面向对象进阶) —— 包、final、权限修饰符、代码块、抽象类和抽象方法方法
接口 JAVA基础 (面向对象进阶)—— 接口
内部类 JAVA基础 (面向对象进阶)—— 内部类

目录

一、  场景引用

二、  静态概述

2.1  Static内存图

2.3  静态定义练习 

三、  工具类

3.1  练习:定义数组工具类

四、 static的注意事项


一、  场景引用

JAVA基础(面向对象进阶) —— static_第1张图片

// Student.java
 
public class Student {
	//学生属性:姓名、年龄、性别
	//新增:老师姓名
	private String name;
	private int age;
	private String gender;
	//public 公共属性
	//修饰符static  student所有对象共享一个teacherName属性
	public static String teacherNanme;
	
	
	public Student() {}
	public Student(String name,int age,String gender) {
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	
	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;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	public void show() {
		System.out.println(name + "," + age + "," + gender + ","+ teacherNanme);
	}
	public void study() {
		System.out.println(name + "正在学习");
	}
	
}
//StudentTest.java
 
public class StudentTest {
	public static void main(String[] args) {
		//创建第一个学生对象
		Student s1 = new Student();
		s1.setName("张三");
		s1.setAge(23);
		s1.setGender("男");
		s1.teacherNanme = "老师";
		
		s1.study();
		s1.show();
		//创建第二个学生对象
		Student s2 = new Student();
		s2.setName("李四");
		s2.setAge(24);
		s2.setGender("男");
		
		s2.study();
		s2.show();
	}
}
引用static之前 引用static之后
JAVA基础(面向对象进阶) —— static_第2张图片 JAVA基础(面向对象进阶) —— static_第3张图片

二、  静态概述

static表示静态,是Java中的一个修饰符,可以修饰成员方法、成员变量。

  • 被static修饰的成员变量,叫做静态变量。
  • 被static修饰的成员方法,叫做静态方法。
特点 调用方法
静态变量

被该类所有对象共享

  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在
  • 多用在测试类和工具类中
  • JavaBean类中很少会用
静态方法 类名调用(推荐)、对象名调用 类名调用(推荐)、对象名调用

2.1  Static内存图

JAVA基础(面向对象进阶) —— static_第4张图片 JAVA基础(面向对象进阶) —— static_第5张图片
JAVA基础(面向对象进阶) —— static_第6张图片

2.3  静态定义练习 

需求: 请说出以下属性是否可以被定义为静态

JAVA基础(面向对象进阶) —— static_第7张图片

三、  工具类

概念:帮助我们做一些事情的,但是不描述任何事物的类。

注意:类名见名知意、私有化构造方法


目前,我们已知的三大类:

Javabean类 用来描述一类事物的类。比如,Student、Teacher、Dog、Cat等。
测试类 用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类 不是用来描述一类事物的,而是帮我们做一些事情的类。

3.1  练习:定义数组工具类

需求:在实际开发中,经常会遇到一些数组使用的工具类。
请按照如下要求编写一个数组的工具类: ArrayUtil

  • 提供一个工具类方法printArr, 用于返回整数数组的内容。

               返回的字符串格式如: [10, 20, 50, 34, 100] (只考虑整数数组,且只考虑一维数组)

  • 提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮 点型数组,且只考虑一维数组)
  • 定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。
// ArrayUtil.java

public class ArrayUtil {
    //私有化构造方法
	//目的:为了不让外界创建他的对象
	private ArrayUtil() {}
	
	//需要定义为静态,方便实用
	public static String printArr(int[] arr) {
		StringBuilder sb = new StringBuilder();
		sb.append("[");
		for (int i = 0; i < arr.length; i++) {
			if (i == arr.length - 1) {
				sb.append(arr[i]);
			}else {
				sb.append(arr[i]).append(",");
			}
		}
		sb.append("]");
		return sb.toString();
	}
	
	public static double getAverage(double[] arr) {
		double sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum = sum+ arr[i];
		}
		return sum + arr.length;
	}
}
//TestDemo.java

public class TestDemo {
public static void main(String[] args) {
	//测试工具类
	int[ ] arr1 = {10, 20, 50, 34, 100};
	String arr = ArrayUtil.printArr(arr1);
	System.out.println(arr);
	
	double[] arr2 = {10, 20, 50, 34, 100};
	double avg = ArrayUtil.getAverage(arr2);
	System.out.println(avg);
}
}

运行结果:

四、 static的注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或静态方法,也可以访问非静态的成员变量和非静态的成员方法
  • 静态方法中是没有this关键字

总结:

静态方法中,只能访问静态
非静态方法可以访问所有
静态方法中没有this关键字
public class Student {
	String name;
	int age;
	static String teacherName;
   
	//this:表示当前方法调用者的地址值
	//这个this:是有虚拟机赋值的
	public void show1()(Student this){
		System.out.println("this" + this);
		System.out.println(this.name + "," + this.age +  
				", " + this.teacherName);
		
		//调用其他方法
		this.show2();
		
		//非静态调用静态
		method();
	}
	public void show2() {
		System.out.println("show2");
	}
	
	public static void method() {
		//报错:静态里面没this
		System.out.println(this.name);
		this.show1();
		
		//共享的  与某一个变量没有关系
		//所以没有this关键字
		System.out.println("静态方法");
	}
	
}

你可能感兴趣的:(JAVA基础入门,java,开发语言)