JavaEE入门级别最全教程3--初学者必看

114 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

This关键字

// this关键字,用在类的实例方法(非静态方法中)或者构造方法中,表示当前对象的引用。
在类中,属性名字可以和局部变量的名字相同。此时,如果直接使用名字访问,优先访问的是局部变量。因此,此时需要使用this关键字表示对当前对象的引用,访问属性。
// 当成员变量和局部变量重名,可以用关键字this区分

package com.laity.basicSyntax.day2.oop3;

/**
 * @author : Laity
 * @Project: JavaLaity
 * @Package com.laity.basicSyntax.day2.oop3
 * @date Date : 2021年11月16日 0:31
 * @Description: 自定义一个Person类(this关键字)
 */
public class Person {
    public String name;
    public char gender;
    public int age;
    public int height;
    public int weight;


    public void setInfo(String name, char g, int a, int h, int w) {
        this.name = name;  // this.name 属性
        age = a;
        gender = g;
        height = h;
        weight = w;
    }
}

This关键字的省略

// 当需要访问的属性与局部变量没有重名的时候,this关键字可以写,也可以不写。
// 当需要访问的属性和局部变量重名的时候,this关键字必须写,不可以省略。
// 切记new出来的都是堆里的  不是 栈里的

构造方法

// 其实也是一种方法。用于实例化对象,在实例化对象的时候调用
和普通方法的区别
    构造方法的名字必须和类名保持一致。
    构造方法没有返回值,返回值部分不用写。
构造方法的意义
    一般情况下,使用构造方法,是为了在实例化对象的同时,给一些属性进行初始化赋值。
// 构造方法的书写
package com.laity.basicSyntax.day2.oop3;

/**
 * @author : Laity
 * @Project: JavaLaity
 * @Package com.laity.basicSyntax.day2.oop3
 * @date Date : 2021年11月16日 18:32
 * @Description: 构造方法
 */
public class Student {
    public String name;
    public int age;
    public char gender;
    public int score;

    /**
     * 这是Student类中的一个构造方法
     * 由于这个构造方法没有参数,因此这样的构造方法又被称为无参构造
     */
    public Student() {
        // 这就是一个构造方法
        System.out.println("Student类的无参构造方法被执行了");
    }

    /**
     * 这是Student类中的一个构造方法
     * 这个构造方法由于是有参数的,因此这样的构造方法,被称为 有参构造
     *
     * @param name   属性值
     * @param age    属性值
     * @param gender 属性值
     * @param score  属性值
     */
    public Student(String name, int age, char gender, int score) {
        System.out.println("Student类的有参构造方法被执行了,姓名为" + name + ",年龄为:" + age + ",性别为:" + gender);
    }
}

// 构造方法调用
    public static void main(String[] args) {
    // 关于构造方法:构造方法的调用
    Student lily = new Student();

    // 通过有参构造方法,实例化一个Student对象
    Student Laity = new Student("Laity",18,'男',2);
	}
// 构造方法注意事项
如果一个类中没有写构造方法,系统会自动提供一个public权限的无参构造方法,以便实例化对象。
如果一个类中写构造方法了,此时系统将不再提供任何的默认的构造方法。

构造方法中调用构造方法

    public Student(String name, int age) {
        System.out.println("Student类的有参构造方法被执行了,姓名为" + name + ",年龄为:" + age);
        this.name = name;
        this.age = age;
    }

    /**
     * 这是Student类中的一个构造方法
     * 这个构造方法由于是有参数的,因此这样的构造方法,被称为 有参构造
     *
     * @param name   属性值
     * @param age    属性值
     * @param gender 属性值
     * @param score  属性值
     */
    public Student(String name, int age, char gender, int score) {
        // 1.这句话必须写在构造方法的第一句话
        // 2.不能出现循环调用
        this(name, age);  // 在一个构造方法中调用其他构造方法
        System.out.println("Student类的有参构造方法被执行了,姓名为" + name + ",年龄为:" + age + ",性别为:" + gender);
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.score = score;
    }
}

单例设计模式

// 是由前人准备出来的,用来解决特殊问题而存在的解决思路
单例设计模式:一个类中有且只有一个对象。在程序的任意模块,获取到这个类的对象,是相同的对象。
单例设计模式分为: 饿汉式单例  和  懒汉式单例

饿汉式

package com.laity.basicSyntax.day3.oop3;

/**
 * @author : Laity
 * @Project: JavaLaity
 * @Package com.laity.basicSyntax.day3.oop3
 * @date Date : 2021年11月16日 23:07
 * @Description: 单例设计模式(单例类) 无论在任意地方,这个类的对象,有且只有一个  饿汉式单例
 */
public class Boss {
    // 私有化构造方法,杜绝从外面实例化的可能性
    private Boss() {  // 创建一个无参构造方法
        System.out.println("实例化了一个Boss对象");
    }

    // 私有的,静态的,当前的对象,并实例化
    // 这个对象的实例化,是在类第一次被加载到内存中的时候开辟
    private static Boss instance = new Boss();

    // 给外界提供一个方法,提供一个public权限的方法,用来返回当前类的对象
    public static Boss getBoss() {
        // 如果设计成非静态的外部拿不到对象
        // 需要保证这里的对象 是唯一的对象;无论这个方法被调用多少次 返回的都是相同的对象
        return instance;
    }
}

package com.laity.basicSyntax.day3.oop3;

/**
 * @author : Laity
 * @Project: JavaLaity
 * @Package com.laity.basicSyntax.day3.oop3
 * @date Date : 2021年11月16日 23:08
 * @Description: 运行单例位置
 */
public class Program {
    public static void main(String[] args) {
        // 1.获取一个类的对象
        // Boss boos = new Boss();  // 实例化一个类,但是行不通
        for (int i = 0; i < 100; i++) {
            Boss.getBoss();
        }
    }
}

懒汉式

package com.laity.basicSyntax.day3.oop3;

/**
 * @author : Laity
 * @Project: JavaLaity
 * @Package com.laity.basicSyntax.day3.oop3
 * @date Date : 2021年11月17日 17:13
 * @Description: 懒汉式单例
 */
public class Monitor {
    // 私有化构造方法,杜绝从外面实例化的可能性
    private Monitor() {  // 创建一个无参构造方法
        System.out.println("实例化了一个Monitor对象");
    }

    // 私有的,静态的,当前的对象,并不实例化(什么时候用什么时候实例化)
    // 这个对象的实例化,是在类第一次被加载到内存中的时候开辟
    private static Monitor instance;

    // 给外界提供一个方法,提供一个public权限的方法,用来返回当前类的对象
    public static Monitor getMonitor() {
        // 如果设计成非静态的外部拿不到对象
        // 需要保证这里的对象 是唯一的对象;无论这个方法被调用多少次 返回的都是相同的对象
        if (instance == null) {
            instance = new Monitor();
        }
        return instance;
    }
}

包的概念

/**
 * 包:就是起到了组织代码的作用,可以将功能相关的类,放到一个包中
 * 包名是一个标识符  需要遵循小驼峰命名法 包与包之间如果存在嵌套(包含)的关系,需要用点 来进行分隔
 *      package 写在一个文件的最上方 表示这个文件属于哪个包中
 *      import  导入指定的类到当前文件中,表示可以直接访问其他包中的类(只能从最外层的包开始导:就是不能按相对路径导入)
 * java.lang:java的基础语法。 这个包中的类 是可以直接使用的(已经被默认导入了)
 * import java.util.Scanner;
 * import java.util.Arrays;
**/