Java—类与对象详解

目录

类的创建

类的初始化

就地初始化

默认初始化

类的使用

实例化

成员变量使用

成员方法使用

this的使用

访问成员变量和访问成员方法

构造方法

实例化时使用

this调用构造方法

常见的错误


类的创建

    class 类名{

        属性(变量列表)(可有多个)

        成员方法(可有多个)

    }

示例 

class Student{
    /*属性*/
    public int age;
    public int grade;
    public String sex;
    /*成员方法*/
    public void Class(){
        System.out.print("我是x班的");
    }
    public void grade(){
        System.out.print("我是个伞兵!!");
    }
}

类的初始化

       就地初始化

class Student{

    public int age = 10;
    public int grade = 20;
    public String sex = "gay";
    /*成员方法*/
    public void Class(){
        System.out.print("我是x班的");
    }
    public void grade(){
        System.out.print("我是个伞兵!!");
    }
}

       默认初始化

        当成员变量没有赋初值时 成员变量的值为对应零值

        int是0,float是0.0不用赘述

        引用类型对应的是null

        boolean对应的是false

        char对应的是空格

类的使用

        实例化

          类名 实例名  = new 类名参数)    ----->(这个参数会在构造方法中具体阐述)

          例子

Student zhangsan = new Student();
Student lisi = new Student();
Student wangwu = new Student();

        成员变量使用     

              实例名.成员变量       (然后就当做正常变量使用)

              例子(一个赋值操作)

zhangsan.sex = gay;

        成员方法使用

              实例名.成员方法(参数)     (然后就当做正常方法使用)

              例子  (会输出“我是x班的”)(这里面的参数和类里面的参数一致

zhangsan.Class();

this的使用

       访问成员变量和访问成员方法

        this.变量名

        this.方法()

        只能在类内使用,表示本类的变量名(方法)

        且当参数和成员名冲突时可以区分

        例: 不用this  (给成员赋值)

class Student{
    /*属性*/
    public int age;
    public int grade;
    public String sex;

    public void myscan(int age,int grade,String sex){
        age = age;
        grade = grade;
        sex = sex;
    }
    public void myprintf(){
        System.out.println(age+" "+grade+" "+sex);
    }
}
public class chara {

    public static void main(String[] args) {
        Student st1 = new Student();
        st1.myscan(18,59,"nan");
        st1.myprintf();
    }

输出结果为

它的输出可以看出赋值失败了 因为myscan里面的两个age grade sex相同

正确方法

class Student{
    /*属性*/
    public int age;
    public int grade;
    public String sex;

    public void myscan(int age,int grade,String sex){
        this.age = age;
        this.grade = grade;
        this.sex = sex;
    }
    public void myprintf(){
        System.out.println(age+" "+grade+" "+sex);
    }
}
public class chara {

    public static void main(String[] args) {
        Student st1 = new Student();
        st1.myscan(18,59,"nan");
        st1.myprintf();
    }

}

输出结果为

那么在不冲突的时候我们一定要使用this吗?

答案是不一定,不使用也不一定会程序错误,但是用this可以提升代码可读性,并且使代码更加规范

this调用构造方法

    在构造方法里面详解

构造方法

   构造方法是方法的一种

   1.方法名与类名必须一样

   2.构造方法没有返回值     (注:定义时的返回值不能写void 而是什么都不写)

       定义:public 类名参数

      例:public Student()

      相同参数数量的构造函数只能定义一个

      构造方法使用方法

       实例化时使用

Student zhangsan = new Student();

      实例化的括号里面使用构造函数:一个类里面可以定义多个构造函数,括号里面会调用与参数数量与一致的构造函数。

      如果括号里面有一个参数就调用一个参数的构造函数

      如果括号里面有两个参数就调用两个参数的构造函数

      例:实例化时输入一个参数

class Student{
    /*属性*/
    public int age;
    public int grade;
    public String sex;

    public Student(int age){
        System.out.println("一个参数的构造函数");
    }
    public Student(int age,int grade){
        System.out.println("两个参数的构造函数");
    }

}
public class chara {

    public static void main(String[] args) {
        Student st1 = new Student(1);
    }

}

结果为:

 例:实例化时输入两个参数

class Student{
    /*属性*/
    public int age;
    public int grade;
    public String sex;

    public Student(int age){
        System.out.println("一个参数的构造函数");
    }
    public Student(int age,int grade){
        System.out.println("两个参数的构造函数");
    }

}
public class chara {

    public static void main(String[] args) {
        Student st1 = new Student(1);
    }

}

 结果为:

this调用构造方法

在本类构造方法内部调用构造方法    this(参数) 

(注意这是方法使用阶段,里面直接写参数即可)

注意点1.不能形成闭环(无限循环)

           2.只能放在构造方法第一行

例:在一个构造方法内调用另一个构造函数

class Student{
    /*属性*/
    public int age;
    public int grade;
    public String sex;

    public Student(int age){
        this(1,2);
        System.out.println("一个参数的构造函数");
    }
    public Student(int age,int grade){
        System.out.println("两个参数的构造函数");
    }
}
public class chara {

    public static void main(String[] args) {
        Student st1 = new Student(1);
    }

}

输出结果为:

常见的错误

     我们会发现如果我们不定义任何构造函数时,实例化一个类的时候用:

Student zhangsan = new Student()

程序是不会报错的,但是如果我们定义一个任何参数数量构造函数的时候,再次这么定义就会报错。

因为:在括号里面没有任何参数的时候,我们仍调用了一个空参数构造函数,当我们没有定义任何构造函数的时候,系统会自动创建一个没有参数的空构造函数,所以我们()调用空参数构造函数的时候就调用了系统自动创建的构造函数。

而当我们定义了一个构造函数的时候,系统就不会自动创建,所以当我们调用空参数构造函数的时候,会显示没有此参数数量的构造函数

当然了 如果你定义一个空参数的构造函数也不会报错。

所以总结:

      1.当我们写了一个类之后,没有写构造方法的时候,编译器会帮我们默认生成一个不带参数的构造方法

      2.当我们写了任何一个构造方法之后,就不再自动生成不带参数的构造方法。

      3.一个类 至少会有一个构造方法,即使你没有写

有一个很重点的地方:当我们实例化一个对象的时候,一定(至少)会有两步,第一步:为对象分配内存,第二步:调用合适的构造方法

猜你喜欢

转载自blog.csdn.net/chara9885/article/details/126064405