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

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

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

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

目录

一、  场景引用

二、  静态概述

2.1  Static内存图

2.3  静态定义练习 

三、  工具类

3.1  练习:定义数组工具类

四、 static的注意事项


一、  场景引用

// 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之后

二、  静态概述

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

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

被该类所有对象共享

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

2.1  Static内存图

2.3  静态定义练习 

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

三、  工具类

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

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


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

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("静态方法");
	}
	
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hgngy.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值