类的基本语法

大一蒟蒻学习Java基础的笔记

1.构造器

构造器,就是名字和类名一致,并且没有定义返回值的一种特殊方法。

构造器长什么样?如下代码所示:
//1.无参数构造器
public class Student{
    /*类中的构造器*/
    public Student(){ //只有修饰符,没有返回值(特殊形式)
        
    }
}
//2.有参数构造器
public class Student{
    public Student(String name,int age){
        
    }
}
构造器有什么特点呢?

创建对象时,对象会调用构造器,我们可以指定对象去调用哪个构造器去执行。

//例如:
Student s=new Student();
构造器的常见应用场景:

创建对象时,同时完成对对象成员变量(属性)的初始化赋值。

//例如:
//有参数构造器:
public class Student{
    String name;
    int age;
    char gender;
    public Student(String n,int a,char g){
        name=n;
        age=a;
        gender=g;
    }
}
//对象调用:
Student s1=new Student("乐邦詹士",41,'男')
构造器的注意事项:

1.类默认就自带了一个无参构造器;

2.如果为类定义了有参数构造器,类默认的无参数构造器就没有了,若还想用无参数构造器,就必须自己手写一个无参数构造器出来。

3.要么都不写,要么都写(无参数在开发中别人可能会使用)


2. this关键字

this 关键字是什么?

this就是一个变量,可以用在方法中,来拿到当前对象

哪个对象调用这个方法,this就拿到哪个对象(取地址)

this有哪些应用场景?

this主要用来解决:变量名称冲突问题

//例如:
public class Student{
    String name; //成员变量(整个对象都可以用)    
    public void printHobby(String name){ //局部变量(方法内部)
        System.out.println(this.name+"喜欢"+name);
    }
}

3.封装

什么是封装?

就是用类设计对象处理某一个事务的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去

面向对象的三大特征:封装,继承,多态

封装的设计要求:

合理隐藏,合理暴露。

1.如何隐藏对象的成员?

使用private关键字(私有,隐藏)修饰成员变量,就只能在本类中被直接访问,其他任何地方不能直接访问

2.如何暴露对象的成员(合理暴露)?

使用public(公开)的get和set方法合理暴露,成员变量的取值和赋值

//例如:
//1.为年龄赋值
public void setAge(int age){ 
    if(age>0&&age<200){
        this.age=age;
    }else{
        System.out.println("您赋值的年龄数据非法!");   //例如web端对于输入的年龄的校验
    }
}

//调用:
s1.setAge(18); //赋值18;

//2.为年龄取值:
public int getAge(){
    return age;
}

//调用:
System.out.println(s1.getAge()); //取值
总结(代码层面如何控对象的成员的公开与与隐藏?):
  • 公开成员,可以使用public(公开)进行修饰。
  • 隐藏成员,使用private(私有,隐藏)进行修饰

4.实体类(特殊类) Javabean

1.是一种特殊类,类中要满足如下需求:

1.类中的成员变量全部私有,并提供public修饰的getter/setter方法;

2.类中要提供一个无参数的构造器,有参数构造器可选。

public class Test {
    public static void main(String[] args) {
        //实体类的作用:创建它的对象,存取(封装)数据
        //调用无参构造器的对象
        Student s=new Student();
        s.setName("张三");
        //调用有参构造器的对象
        Student s1=new Student("王五");
    }
}
//实体类
public class Student {
    //1.私有成员变量
    private String name;
    //2.提供公平的getter和setter方法,暴露其取值和赋值

    //必须提供一个无参构造器
    public Student() {
    }

    //提供一个有参构造器(可选)
    public Student(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
2.实体类有啥应用场景?
  • 实体类的对象只负责数据读取,而对数据的业务处理交给其他类的对象来完成,以实现数据数据业务处理相分离。(分层思想)
public class Student{
    private String name;
    private double score;
    //getter/setter 方法
}
public class StudentOperator {
    private Student s; //用来记住将来要操作的学生对象 (null)
    public StudentOperator(Student s){
        this.Student=s;
    }
    //打印总成绩
    public void printscore{
    }
    //打印平均成绩
    //……
}
public class Test {
    public static void main(String[] args) {
        Student s1=new Student("王五", 80);
        //创建一个学生的操作对象专门负责对学生对象的数据进行业务分析
        StudentOperate op=new StudentOperate(s1);
        op.printscore();
    }
}

小结:

1.什么是实体类?有什么特点?
  • 成员变量必须私有,且要为它们提供get、set方法;必须有无参数构造器
  • 仅仅是一个用来保存数据的Java类,可以用它来创建对象,保存某个事物的数据
2.实体类的应用场景(如上)

4. static

1. static 修饰成员变量

成员变量按照有无static修饰,分为两种:
  • 静态变量(类变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。

    访问方式:类名.静态对象

    也可以以“对象名.静态变量”的方式(语法上不推荐 )

  • 实例变量(对象的变量):无static修饰,属于每个对象的。

    访问方式:对象.实例变量

    注意:不允许使用this关键字

    public class student{
        //静态变量:属于类,只加载一份,可以被类和类的全部对象共享访问
        static String name;  //先进入堆内存null
        //实例变量(对象的变量):属于对象,每个对象一份
        int age;
    }
    
静态变量应用场景:
  • 如果某个数据只需要一份,且希望能够被共享(修改/访问),则该数据可以定义为静态变量来记住

  • 例如:记录用户类创建了多少用户对象:

    public class User{
        //静态变量
        private static int number;
        //构造器
        public User(){
            User.number++;
        }
    }
    
    访问自己类中的类变量,可以省略类名不写

    注意:在某类中访问其他类里的类变量必须带类名访问

    public class Student{
        static String school="HUT";//类变量(静态变量)
        public void showSchool(){
            //本类内访问类变量,可省略类名Student
            System.out.println(school);
                             //等价于Student.school
        }
    }
    

2. static修饰方法

使用规范:

1.如果这个方法只是为了做一个功能且不需要直接访问对象的数据,那么这个方法应该定义为静态方法

2.如果这个方法是对象的行为,需要访问对象数据,那么这个方法应该定义为实例方法

public class Test {
    public static void main(String[] args) {
        //认识 static修饰与不修饰方法的区别
        //1.类名.静态方法(推荐)
        Student.printHelloWorld();
        //2.对象.静态方法(不推荐)
        Student s1 = new Student();
        s1.printHelloWorld();
        //3.对象名.实例方法
        //Student.printPass(); //报错
        s1.setScore(59.9);
        s1.printPass();
    }
}
public class Student {
    private double score;
    //静态方法:有static修饰,属于类持有
    public static void printHelloWorld(){
        System.out.println("Hello World");
        System.out.println("Hello World");
        System.out.println("Hello World");
    }
    //实例方法:无static修饰,属于对象持有
    public void printPass() {
        System.out.println(score>=60?"通过":"挂科了");
    }
    public void setScore(double score) {
        this.score = score;
    }
}

3.静态方法的应用

静态方法常见的应用场景
  • 做工具类
工具类是什么?
  • 工具类中的方法都是一些静态方法,每个方法用来完成一项功能,以便于开发者直接使用。
使用类方法来设计工具类有啥好处?
  • 提高了代码复用;
  • 调用方便,提高了开发的效率

注意:工具类没有创建对象的需求(占内存),建议将工具类的构造器进行私有

4. static的注意事项

  • 静态方法中可以直接访问静态成员不可以直接访问实例成员
  • 实例方法中既可以直接访问静态成员,也可以直接访问实例成员
  • 实例方法中可以出现this关键字,静态方法中不可以出现this关键字的

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐