本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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;
**/