60.【Java 进阶】(一)

简介: 60.【Java 进阶】

(一)、静态变量

假如说:在一个班级里面有n名学生,每一名学生的姓名。年龄、学号都不一样,我们可以通过创建Student类来对每一名学生进行赋值的操作。然而呢,老师的名字只有一个,那名字肯定也是相同的啊。如果我们在定义老师的名字的时候利用正常的成员变量。那么每次操作一个学生,我们都要对这个老师进行赋值的操作,那么程序会显得有一点笨重。这时候我们就可以使用STATIC静态变量对其操作运行。

1.成员变量是private:

Student类:

public class Student {
    private String name;
    private int age;
    private int id;

main类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
        Student stu1=new Student();
        stu1.setAge(18);
        stu1.setName("吉士先生");
        stu1.setId(21032114);
        stu1.study();
        stu1.show();
        Student stu2=new Student();
        stu2.setAge(20);
        stu2.setName("傻瓜");
        stu2.setId(21032118);
        stu2.study();
        stu2.show();
    }
}

类对象能访问公有权限的成员变量和公有的成员方法。哪个对象调用这个方法得话,那么就输出和设置这个对象的数据

2.成员变量是public:

Student类:

public class Student {
    private String name;
    private int age;
    private int id;
    public String teacher;   //公有变量

main类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
        Student stu1=new Student();
        stu1.setAge(18);
        stu1.setName("吉士先生");
        stu1.setId(21032114);
        stu1.teacher="大聪明";    //通过调用成员变量进行操作
        stu1.study();
        stu1.show();
        Student stu2=new Student();
        stu2.setAge(20);
        stu2.setName("傻瓜");
        stu2.setId(21032118);
        stu2.study();
        stu2.show();
    }
}

因为我们只对学生对象1进行赋值操作,所以我们此时此刻的对象2的老师的那个位置是空的。

网络异常,图片无法展示
|

3成员变量是static

student类:

public class Student {
    private String name;
    private int age;
    private int id;
    static String teacher;

main方法:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
        Student stu1=new Student();
        Student.teacher="大聪明";   // 通过类名.静态成员变量名对其进行赋值.类对象也可以
        stu1.setAge(18);
        stu1.setName("吉士先生");
        stu1.setId(21032114);
        stu1.study();
        stu1.show();
        Student stu2=new Student();
        stu2.setAge(20);
        stu2.setName("傻瓜");
        stu2.setId(21032118);
        stu2.study();
        stu2.show();
    }
}

因为静态变量是归类所有的,并不是某一个对象所有的

静态变量:优先于类对象的创建在堆里面。

(二)、类的三种格式:

工具类:

1.JavaBean 类:

2.测试类:

3.工具类:

工具类:实质上就是方法(构造函数用私有的)

代码展示:

工具类:

public class Util {
    private Util(){};
    //整数数组转成字符串:
    public static String ArrayChangeString(int []a){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for(int i=0;i<a.length;i++){
            if(i==a.length-1){
                sb.append(a[i]);
            }else{
                sb.append(a[i]).append(","+" ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
    //求一个数组的平均数:.
    public static double Average(int []a){
        int sum=0;
        for(int i=0;i<a.length;i++){
            sum+=a[i];
        }
        return sum/a.length;
    }
}

测试类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
       int []a=new int[]{1,2,3,4,5,8};
        System.out.println(Util.ArrayChangeString(a));
        int []b=new int[]{1,2,3,5,8,7,6,9};
        System.out.println(Util.Average(b));
    }
}

工具类 测试类 JavaBean类。三则连用

题目描述:

有一个对象集合,对象的属性是name score id.请你在工具类中实现类对象中最大的值,然后返回它的类对象。并且后输出所有的值信息。

工具类:

public static Student FindMaxScore(ArrayList<Student> stu){
        double max;
        Student s=stu.get(0);
        max=s.getScore();
        for(int i=1;i<stu.size();i++){
            Student s1=stu.get(i);
            double num=s1.getScore();
            if(num>max){
                s=s1;    //对象拷贝
            }
        }
        return s;
    }

JavaBean类:

public class Student {
    private String name;
    private double score;
    private String ID;
    public Student() {
    }
    public Student(String name, double score, String ID) {
        this.name = name;
        this.score = score;
        this.ID = ID;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
    public String getID() {
        return ID;
    }
    public void setID(String ID) {
        this.ID = ID;
    }
}

测试类:

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello {
    public static void main(String[] avgs) {
     ArrayList<Student> stu=new ArrayList<>();
     Student s=new Student("吉士先生",94.3,"256dsd");
     Student s1=new Student("小姐也",56.6,"22222d");
     Student s2=new Student("大聪明",96.3,"11111d");
     stu.add(s);
     stu.add(s1);
     stu.add(s2);
     Student s3=Util.FindMaxScore(stu);
        System.out.println("最大值的信息是:"+s3.getName()+" "+s3.getScore()+" "+s3.getID());
    }
}


相关文章
|
4月前
|
Java Perl
Java进阶之正则表达式
【7月更文挑战第17天】正则表达式(RegEx)是一种模式匹配工具,用于在字符串中执行搜索、替换等操作。它由普通字符和特殊元字符组成,后者定义匹配规则。
32 4
|
4月前
|
设计模式 Java
Java进阶之代理
Java进阶之代理
25 4
|
4月前
|
设计模式 Java
Java进阶之代理
Java进阶之代理
27 3
|
4月前
|
设计模式 Java
Java进阶之代理
【7月更文挑战第16天】Java动态代理通过`java.lang.reflect.Proxy`和`InvocationHandler`实现,无需编译期定义代理类。与静态代理相比,它更灵活,代码更简洁,适用于方法数量变化或未知接口代理。
25 2
|
4月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
37 6
|
4月前
|
Java 编译器 API
Java进阶之标准注解
【7月更文挑战第15天】Java标准注解包括标记注解(如@Deprecated)、@Override(检查方法重写)、@SuppressWarnings(抑制警告)。多值注解如@RequestMapping在Spring中用于HTTP请求映射。元注解如@Retention控制注解保留策略,@Target指定应用位置。Java8引入类型注解(@FunctionalInterface、@SafeVarargs)和重复注解(@Repeatable)。自定义注解可通过反射读取,如示例中的MyMarkerAnnotation等。
24 2
|
4月前
|
安全 Java
Java进阶之枚举
【7月更文挑战第11天】Java枚举是Java 5引入的特性,用于定义固定常量集合,如星期。枚举是继承自`java.lang.Enum`的特殊类,编译后成为final类,每个枚举值是静态final实例。定义枚举用`enum`关键字,如`public enum Weekday {MONDAY, TUESDAY, ...}`。枚举可包含方法和变量,能实现接口但不能继承其他类。例如,`Weekday`枚举可实现`Describe`接口,提供`describe()`方法。在实际应用中,枚举常用于表示如响应状态等固定选项,便于类型安全和代码阅读。
37 8
|
4月前
|
Java 编译器 API
Java进阶之标准注解
Java进阶之标准注解
29 1
|
4月前
|
IDE Java 测试技术
Java进阶之反射
【7月更文挑战第14天】Java反射机制允许在运行时动态获取类信息、创建对象及调用其方法。它基于`Class`类,让我们能访问类的属性、方法、构造器。例如,通过`Class.forName()`加载类,`Class.newInstance()`创建对象,`Method.invoke()`执行方法。反射广泛应用于动态代理、单元测试、序列化及框架中,提供灵活性但牺牲了性能,且可破坏封装性。IDE的代码补全也是反射的应用之一。在使用时需谨慎,避免对私有成员的不当访问。
39 1
|
4月前
|
Java
Java进阶之函数式编程
Java进阶之函数式编程
31 3