类与对象,以及构造器——

类的定义

//例如:"CourseNumber"的类:标示课号。
class CourseNumber{
  String number;
  String coursename;
  void showInfo(){
    System.out.println("课号:"+number+",课程名称:"+coursename);
  }
}
//学生类
class Student{
  String number;
  String name;
  //构造方法
  Student(String num,String stuname){
    this.number = number;
    this.name = stuname;
  }
  //构造方法
  String selectCourse(CourseNumber num){
    String s = name + "您好,您选修的课程信息为:"+num.shouInfo();
    return s;
  }
}

插入知识点——

数据成员:一个具有特特定数据类型、处于类内部的一个变量,又称为成员变量。

数据类型可以为任何合法的数据类型,例如简单的数据类型、数组类型、类类型、接口类型。

编程风格建议:

1.一个成员变量占据一行。

2.变量名最好能见名知意。

3.首字母小写,多单词构成第二单词开始首字母大写。

  1. 类的成员:方法成员或者数据成员都可以加static修饰符。

  2. 对象的成员:没有加static修饰的成员。

  3. 类的成员和对象的成员都是类体中的成员。

注意:

加了static的变量,访问这种类变量的标准格式可以用:类名.类的成员名,或者对象变量名.类的成员名(不过不推荐后者)。而对象的数据成员,则通过对象变量名.类的成员名访问。

一般情况下,每个对象用自己的成员变量,他们是独立的,但有些情况下,当多个对象要共享同一个成员时,我们在这个成员前用static修饰使之成为类变量。

举个例子:

//每当新建一个DemoClass对象时,该变量自身加1,从而实现了对创建成功的对象计数功能。
class DmeoClass{
  static int instanceNum = 0; 
  //构造器,我们下一节讨论
  DemoClass(){
    DemoClass.instanceNum++;
  }
}

  • 类,是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物。

    • 动物、植物、手机、电脑......
    • Person类、Pet类、Car类等,这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为。
  • 对象,是抽象概念的具体实例。

    • 张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例。
    • 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。

    我们可以将这些思想转换为代码实现!

创建与初始化对象

定义了一个类后,相当于创建了一个新的数据类型。创建对象,也就是声明新的数据类型变量,并为这种新的数据类型变量分配内存空间的过程。分配空间后,这个类的实例或者说是对象就创建好了。

例如:

//梯形类
class Trapezoid{
  double above;
  double bottom;
  double height;
//构造方法,用于初始化数据成员的值
  Trapezoid(double a,double b,double h){
    above = a;
    bottom = b;
    height = h;
  }
//普通方法:用于计算梯形的面积
  double computeArea(){
    return (above+bottom)*height/2;
  } 
}
//主类:
public class Test{
  public class void main(String[] args){
    Trapezoid t = new Trapezoid(4.5,9,2);//1.声明一个变量名为t,类类型Trapezoid;2.使用new运算符创建一个Trapezoid实例,对t进行初始化;3.t就指向了这个新建的Trapezoid实例(或者对象),从此就可以通过t调用它的实例(或者对象)方法了
    System.out.println(t.computeArea);
  }
}
  • 使用new关键字创建对象,对象创建后,对象对应的变量名就是对象的“引用”,是对象的一个“别名”。
  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
    • 1.必须和类的名字相同
    • 2.必须没有返回类型,也不能写void
  • 构造器必须要掌握!!!

构造器详解

构造方法(也就是构造器)是类中的一种特殊的方法,当程序用类创建对象时,会自动调用它。Java语言规范里叫Constructor,我们翻译为构造方法,实际上还是觉得构造器比较好一点,所谓的构造器,严格意义上来说不算是一个真正的方法,也就没有所谓的返回值。

此外,类中如果没有显式定义构造器,编译系统也会自动地给我们提供一个默认的构造器(这个系统提供的构造器,是没有带参数的,也没有方法体),而如果我们显式的定义了一个有参构造,则这个无参构造就必须显式定义!!

package com.oop.Test02;

public class Person {
    //一个类即使什么都不写,它也会存在一个方法
    String name;
    //1.使用new关键字(本质是在调用构造器),类中必须要有构造器
    //2.用来初始化对象值
    public Person(){
    }
    //有参构造:一旦定义了有参构造,无参构造就必须显式定义
    public Person(String name){
        this.name = name;
    }
}
/*
    public static void main(String[] args) {
      //new 实例化了一个对象
        Person person = new Person();
        Person person2 = new Person("xuaner");
        Syetem.out,println(person.name);//null
        System.out.println(perso2n.name);//xuaner
    }
    构造器:
    1.和类名相同
    2.没有返回值
    作用:
    1.new的时候,本质在调用构造方法
    2.初始化对象的值
    注意点:
    定义了有参构造之后,如果想使用无参构造,就必须显式定义一个无参的构造
    IDEA给我们提供了一个快捷的方式:Alt+Insert+Fn 快速生成构造器
    this.名 = 值。    this.后面的是当前类 = 传进来的参数;
 */

穿插一点继承里面的东西——(后面会讲)

在继承里,子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。

如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

创建对象内存分析

在此,我们以图形的形式展示!

简单小结类与对象

        /*
        1.类与对象
        类是一个模板,对象是一个具体的实例
        2.方法
        定义,调用,必须要会!!
        3.对象的引用
        引用类型:基本类型(8大基本类型)之外的
        对象是通过引用(引用就是指向对象的一个地址)来操作的: 栈--->堆
        4.属性:就是一个个字段Field,也是成员变量
        系统默认的初始化:
        数字: 0  0.0
        char: u0000
        boolean:false
        引用:null
        5.赋值:
        修饰符 属性类型 属性名 = 属性值!
        6.对象的创建和使用:
        - 必须使用new关键字 创建对象,构造器 Person xiaobai = new Person();
        - 对象的属性  xiaobai.name
        - 对象的方法  xiaobai.sleep()
        7.类:
        静态的属性     属性
        动态的的行为   方法
         */
posted @ 2022-05-14 21:56  柔小兔  Views(44)  Comments(0Edit  收藏  举报