static静态变量
静态变量是随着类的加载而加载的,优先于对象的出现的。我们只要在Student类中的“老师” 成员变量,前面加上static静态类型,就意味着Student类所有的对象共享同一个老师的姓名啦。我们在测试类中使用static所定义的成员变量的时候,可以直接用类名加点号,来使用static静态类型所定义的变量
javabean类
public class StedentText {
public static void main(String[] args) {
Student.teacherName="小龙";
//1.创建第一个学生对象
Student s1 = new Student();
s1.setName("张三");
s1.setAge(21);
s1.setGender("男");
s1.study();
s1.show();
//创建第二个学生对象
Student s2 = new Student();
s2.setName("王五");
s2.setAge(22);
s2.setGender("女");
s2.study();
s2.show();
}
}
测试类
public class Student {
private String name;
private int age;
private String gender;
public static String teacherName;
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 study(){
System.out.println(name+"正在学习");
}
public void show(){
System.out.println(name+", "+age+", "+gender+", "+teacherName);
}
}
运行结果
张三正在学习
张三, 21, 男, 小龙
王五正在学习
王五, 22, 女, 小龙
修改测试static
我们根据上面的代码稍加改动,我们在测试类中创建第二个对象的时候,我们直接打印数对象中的方法来。因为我们要知道一点,我们new的第二个方法,它在堆区里面会先开辟一块空间,用来存放我所创建的对象,我们把这块空间的地址赋值给到了s2,也就是我们刚刚新创建的对象。我们直接调用的时候,在堆区new出来的这块空间,里面的是没有值的。而我们在测试类中s2.方法名,找到的是s2所开辟空间的地址,通过地址找到了值我们发现名字是null,年龄是0
javabean类
public class Student {
private String name;
private int age;
private String gender;
public static String teacherName;
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 study(){
System.out.println(name+"正在学习");
}
public void show(){
System.out.println(name+", "+age+", "+gender+", "+teacherName);
}
}
java测试类
public class StedentText {
public static void main(String[] args) {
Student.teacherName="小龙";
//1.创建第一个学生对象
Student s1 = new Student();
s1.setName("张三");
s1.setAge(21);
s1.setGender("男");
s1.study();
s1.show();
//创建第二个学生对象
Student s2 = new Student();
s2.show();
}
}
运行结果
张三正在学习
张三, 21, 男, 小龙
null, 0, null, 小龙
静态方法
定义:被static修饰的成员方法,叫做静态方法
在我们以前写代码的时候,在测试类里面那些加上static的都是静态方法。我们在javabean里面写的get,set都是一些成员方法。
特点:静态方法多用在测试类和工具类当中。javabean当中很少会去使用。
调用方法:类名调用
Str ingBuffer类
在Java中,Str ingBuffer类的append和insert方法用于向缓冲区中添加或插入数据。下面分别介绍这两个方法的使用方法:
append方法
该方法用于将指定对象转换为字符串后添加到缓冲区末尾。append方法可以接收任意类型的数据,包括字符串、字符、整数、浮点数等。下面是一些示例:
StringBuffer sb = new StringBuffer("Hello, ");
sb.append("World"); // 将字符串"World"添加到缓冲区末尾
sb.append('!'); // 将字符'!'添加到缓冲区末尾
sb.append(123); // 将整数123添加到缓冲区末尾,转换为字符串"123"
System.out.println(sb);
运行结果
Hello, World!123
insert方法
该方法用于在缓冲区的指定位置插入指定对象转换为字符串后的内容。insert方法可以接收三个参数:第一个参数是插入位置的索引,第二个参数是要插入的数据,第三个参数是插入的数据的长度。下面是一些示例:
StringBuffer sb = new StringBuffer("Hello, World!");
sb.insert(7, "Java"); // 在索引7的位置插入字符串"Java",变为"Hello, JavaWorld!"
sb.insert(12, " "); // 在索引12的位置插入单个空格,变为"Hello, Java World!"
System.out.println(sb);
运行结果:
Hello, JavaW orld!
调用工具类-练习1
需求
在实际开发中,经常会遇到一些数组使用的工具类请按照如下要求编写一个数组的工具类:ArrayUtil
提供一个工具类方法printArr,用于返回整数数组的内容。返回的字符串格式如:[10,20,50,34,100](只考虑整数数组,且只考虑一维数组)提供这样一个工具方法getAerage,用于返回平均分。 (只考虑浮点型数组,且只考虑一维数组)定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果
解题思路
我们首先私有化构造方法,以达到不让外界创建它的对象的目的,然后我们把结果返回到测试类,在测试类中测试。方法之前字符串中练习用到过
工具类
public class ArrayUtil {
//私有化构造方法
//目的:为了不让外界创建他的对象
private ArrayUtil(){}
//需要定义静态的,方便使用
public static String printArr(int[] arr){
StringBuffer sb = new StringBuffer();
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;
}
}
测试类
public class TextDemo {
public static void main(String[] args) {
//测试工具类中两个方法是否正确
int[] arr = {1,2,3,4,5};
String str = ArrayUtil.printArr(arr);
System.out.println(str);
double[] arr2 = {1.5,3.7,4.9,5.8,6.6};
double avg = ArrayUtil.getAverage(arr2);
System.out.println(avg);
}
}
运行结果
[1,2,3,4,5]
4.5
定义学生工具类
需求
定义一个集合,用于存储3个学生对象。学生类的属性为:name、age、gender定义一个工具类,用于获取集合中最大学生的年龄
解题思路
在工具类中,我们要先创建一个集合来存储对象。创建三个学生对象,把学生对象添加到集合当中,调用工具类中的方法
javabean类
public class Student {
private String name;
private int age;
private String gender;
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 class StudentUtil {
private StudentUtil(){
}
//静态方法
public static int getMaxAgeStudent(ArrayList<Student> list){
int max = list.get(0).getAge();
//2.循环变量集合
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getAge()>max){
max=list.get(i).getAge();
}
}
//3.直接返回max
return max;
}
//4.调用工具类中的方法
}
测试类
public class Text {
public static void main(String[] args) {
//1.创建一个集合来存储学生对象
ArrayList<Student> list = new ArrayList<>();
//2.创建3个学生对象
Student stu1 = new Student("zhangsan",25,"男");
Student stu2 = new Student("wangwu",26,"男");
Student stu3 = new Student("liuer",22,"女");
//3.把学生对象添加到集合当中
list.add(stu1);
list.add(stu2);
list.add(stu3);
int maxAgeStudent = StudentUtil.getMaxAgeStudent(list);
System.out.println(maxAgeStudent);
}
}