day09构造方法&static&工具类的创建

本文介绍了Java中的构造方法,包括其作用、格式、注意事项及成员变量的赋值方式。此外,还详细讲解了static关键字,阐述了它的特点、应用场景及使用注意事项。最后,讨论了工具类的创建要点,如构造方法私有化和方法的static修饰。

构造方法

构造方法作用概述:

给对象的数据进行初始化

构造方法格式:

方法名与类名相同

没有返回值类型,连void都没有

没有具体的返回值

构造方法注意事项:

如果你不提供构造方法,系统会给出默认构造方法

如果你提供了构造方法,系统将不再提供

构造方法也是可以重载的

给成员变量赋值的两种方式:
    1、无参构造方法+setXxx(...)
    2、带参构造方法赋值

        一个标准类的3.0版本写法:
            成员变量:被private修饰
            构造方法:一个无参构造方法/一个带所有参数的构造方法
            成员方法:getXxx()和setXxx(...)
            show():打印所有成员变量的值

package com.shujia.wyh.day09;
class Teacher {
    private String name;
    private int age;

    //构造方法:
    Teacher() {
    }

    Teacher(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //getXxx()
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    //setXxx(...)
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //show()
    public void show() {
        System.out.println(name + "---" + age);
    }
}

public class TeacherDemo {
    public static void main(String[] args) {
        //使用无参构造方法创建对象,使用setXxx() 对成员变量进行赋值
        Teacher t1 = new Teacher();
        t1.setName("小王");
        t1.setAge(18);
        t1.show();

        //使用带参数的构造方法创建对象并给成员变量进行赋值
        Teacher t2 = new Teacher("小杨", 18);
        t2.show();
    }
}

生成构造方法,get,set方法的快捷键
alt + Insert

        成员方法:
            根据返回值:
                1、没有返回值。void
                2、有返回值
            形式参数:
                1、没有参数的方法
                2、带参数的方法

package com.shujia.wyh.day09;
class Function {
    //定义一个没有返回值没有参数的成员方法
    public void fun1() {
        System.out.println("这是一个没有返回值,没有参数的方法");
    }

    //定义一个没有返回值,带参数的方法
    public void fun2(String name) {
        System.out.println("这是带参数无返回值的方法:" + name);
    }

    //定义有返回值没有参数的方法
    public String fun3() {
        return "你好";
    }

    //定义一个有返回值有参数的方法
    public String fun4(String s) {
        return s + "你好";
    }


}


public class FunctionDemo {
    public static void main(String[] args) {
        //创建Function类的对象
        Function function = new Function();
        //没有返回值的方法,直接调用可以输出结果
        function.fun1();
        function.fun2("hello");

        //有返回值的方法,调用的时候,需要用一个变量接收返回值或者直接使用
        String s1 = function.fun3();
        System.out.println(s1);
        String s2 = function.fun4("小明");
        System.out.println(s2);


    }
}

static

static关键字的特点:它可以修饰成员变量和成员方法
        1、随着类的加载而加载
        2、优先于对象而存在的。
        3、被类的所有对象共享:
        什么时候使用静态static关键字呢?
                如果某个成员变量是被所有的对象共享的,值是一样的,那么它就应该被定义为static静态的。
        4、可以通过类名直接调用

 

static关键字使用注意事项:
1、在静态方法中是没有this关键字的
        this代表的是当前调用该方法的对象,而被static修饰的成员是优先于对象而存在的。被static修饰的成员是随着类的加载而加载,这时候,还没有对象产生,也就说明没有this关键字,所以在静态方法中无法使用this关键字。
2、将成员方法分成两类:
                静态的成员方法:
                    访问的内容:
                        成员变量:只能访问静态的成员变量
                        成员方法:只能访问静态的成员方法
                非静态的成员方法:
                    访问的内容:
                        成员变量:既可以访问非静态的成员变量,也可以访问静态的成员变量
                        成员方法:既可以访问非静态的成员方法,也可以访问静态的成员方法

               总结:
                    静态的只能访问静态的。

package com.shujia.wyh.day09;
class Student3 {
    private String name;
    private int age;
    private static int a;

    public Student3() {
    }

    public Student3(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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 static void fun1(){
        //尝试访问非静态的成员变量name
        //无法从静态上下文中引用非静态变量 name
        //静态的成员方法不能访问非静态的成员变量
//        System.out.println(name);

        //尝试访问静态的成员变量a
        //静态的成员方法可以访问静态成员变量
        System.out.println(a);

        //尝试访问非静态的成员方法show()
        //无法从静态上下文中引用非静态方法 show()
        //静态的成员方法不能访问非静态的成员方法
//        show();

        //尝试方法静态的成员方法function()
        //静态的成员方法可以访问静态的成员方法
        function();

    }

    public void fun2(){
        //尝试访问非静态的成员变量name
        //非静态的成员方法可以访问非静态的成员变量
        System.out.println(name);

        //尝试访问静态的成员变量a
        //非静态的成员方法可以访问静态成员变量
        System.out.println(a);

        //尝试访问非静态的成员方法show()
        //非静态的成员方法可以方法非静态的成员方法
        show();

        //尝试方法静态的成员方法function()
        //非静态的成员方法可以访问静态的成员方法
        function();

    }

    public static void function(){

    }

    public void show() {
        System.out.println(name + "---" + age);
    }
}

public class StaticDemo2 {
    public static void main(String[] args) {

    }
}

     静态变量与成员变量的区别:
        所属不同
            静态变量属于类,所以也称为为类变量
            成员变量属于对象,所以也称为实例变量(对象变量)
        内存中位置不同
            静态变量存储于方法区的静态区
            成员变量存储于堆内存
        内存出现时间不同
            静态变量随着类的加载而加载,随着类的消失而消失
            成员变量随着对象的创建而存在,随着对象的消失而消失
        调用不同
            静态变量可以通过类名调用,也可以通过对象调用
            成员变量只能通过对象名调用
    

工具类的创建
        a:构造方法私有化,保证调用时不能创建对象

        b:方法被static修饰,可以通过类名直接调用,main方法是静态的,而静态的只能访问静态的,保证方法能被调用       

        c:用 类名.方法名 来调用

package com.shujia.wyh.day09;

/**
 * 这是针对数组相关操作的工具类
 * @author Alen
 * @version V.1.0
 *
 */
public class ArrayTool {
    /**
     * 这是私有的无参构造方法
     */
    private ArrayTool(){

    }


    /**
     * 这是遍历数组的方法,遍历后的格式是[元素1,元素2,元素3...]
     * @param array 这是调用该方法时需要传入的参数,数据类型是int类型的数组
     */
    public static void printArray(int[] array){
        for(int i=0;i<array.length;i++){
            if(i==array.length-1){
                System.out.print(array[i]+"]");
            }else if(i==0){
                System.out.print("["+array[i]+",");
            }else {
                System.out.print(array[i]+",");
            }
        }
        System.out.println();
    }

    /**
     * 这是数组逆序的方法
     * @param array 这是调用该方法时需要传入的参数,传入的数据类型是int类型的数组
     * @return 返回逆序后的数组
     */
    public static int[] niXu(int[] array){
        for(int start=0,end=array.length-1;start<=end;start++,end--){
            int temp = array[start];
            array[start] = array[end];
            array[end] = temp;
        }
        return array;
    }
}

### Java `Date` 工具类的使用方法与实现示例 #### 1. 简介 Java 中提供了多种用于日期和时间处理的工具类,其中最常见的是 `java.util.Date` 和 `java.text.SimpleDateFormat` 类。这些工具类可以帮助开发者轻松完成日期格式化、解析以及基本的时间计算。 --- #### 2. `Date` 类的基本用法 `Date` 是 Java 提供的一个基础类,用来表示特定的瞬间,精确到毫秒级别[^2]。以下是其常见的用途: - **获取当前时间** ```java import java.util.Date; public class Main { public static void main(String[] args) { Date currentDate = new Date(); // 创建一个新的实例,默认为当前时间 System.out.println("当前时间为:" + currentDate); } } ``` - **设置指定时间** 可以通过构造函数来创建一个具有特定时间戳的对象: ```java long timestamp = 1672502400000L; // 时间戳 (单位:毫秒) Date specifiedDate = new Date(timestamp); // 设置自定义时间 System.out.println("指定时间为:" + specifiedDate); ``` --- #### 3. 使用 `SimpleDateFormat` 进行日期格式化 由于 `Date` 对象本身不提供友好的字符串形式展示功能,因此通常会配合 `SimpleDateFormat` 来完成日期的格式化或解析工作。 - **日期转字符串** ```java import java.text.SimpleDateFormat; import java.util.Date; public class DateFormatExample { public static void main(String[] args) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 定义格式 String formattedDate = sdf.format(new Date()); // 将当前时间转换成字符串 System.out.println("格式化的日期为:" + formattedDate); } } ``` - **字符串转日期** ```java String dateString = "2023-01-01 12:00:00"; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date parsedDate = sdf.parse(dateString); // 解析字符串为日期对象 System.out.println("解析后的日期为:" + parsedDate); } catch (Exception e) { e.printStackTrace(); } ``` --- #### 4. 常见的操作示例 除了简单的日期显示外,还可以通过其他辅助类(如 `Calendar`)来进行复杂的日期运算[^3]。 - **增加/减少天数** ```java import java.util.Calendar; import java.util.Date; public class AddDaysExample { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); // 获取日历实例 calendar.setTime(new Date()); // 设置当前时间 calendar.add(Calendar.DAY_OF_MONTH, 5); // 向前加5天 Date futureDate = calendar.getTime(); // 转换回Date类型 System.out.println("未来五天的日期为:" + futureDate); } } ``` - **比较两个日期大小** ```java Date date1 = new Date(1672502400000L); Date date2 = new Date(); if (date1.before(date2)) { // 判断是否早于某个时间点 System.out.println("date1 在 date2 之前!"); } else if (date1.after(date2)) { // 判断是否晚于某个时间点 System.out.println("date1 在 date2 之后!"); } else { System.out.println("两者的日期相同!"); } ``` --- #### 5. 总结 以上展示了如何利用 Java 的内置工具类 `Date` 和 `SimpleDateFormat` 处理日常开发中的日期需求。对于更加复杂的需求,则可能需要用到第三方库或者更新版本的语言特性(如 `LocalDateTime`),它们能够进一步提升代码可读性和性能表现[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值