美文网首页Java学习笔记
coreJava_3——类和对象

coreJava_3——类和对象

作者: panda_Hi | 来源:发表于2018-07-31 14:38 被阅读5次

    类和对象

    定义类

    类和对象(object,也被称为实例,instance),类是抽象的,用来模拟现实事物,可理解为某种概念,而“对象”是类的具体实例。对象是具体的,根据类的描述创造出来的。

    对于一个类定义,可以包含三个最常见的成员:构造器、成员变量、方法。类里各成员之间的定义顺序无影响,各成员之间可以相互调用,注意:static修饰的成员不能访问没有static修饰的成员

    成员变量用于定义该类或该类的实例所包含的状态数据;
    方法用于定义该类或该类的实例的行为特征或者功能实现;
    构造器用于构造该类的实例,java通过new关键字来调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类将无法创建实例。因此java默认为一个类提供无参构造器,但是如果程序员手动提供了构造器,系统将不再为该类提供默认构造器。

    定义成员变量的格式:

    [修饰符] 类型 成员变量名 [=默认值];
    
    

    注:

    • 修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能用其中一个,可以与static、final组合用
      定义

    定义方法的格式:

    [修饰符] 方法返回类型 方法名(形参列表){
            //方法体
    }
    

    注:

    • 修饰符可以省略,也可以是public、protected、private、static、final,其中public、protected、private只能用其中一个,可以与static、final组合用
    • 如果声明了返回类型,方法体中必须有一个有效的return语句,该语句返回一个变量或一个表达式,且类型需要与声明的返回类型一致;
      果果没有返回类型,需要使用void声明
      定义构造器:
    [修饰符] 构造器名(形参列表){
            //构造器执行体
    }
    

    注:

    • 修饰符:可以省略,也可以是public、protected、private之一
    • 构造器名:必须和类名相同
    • 形参列表:和定义方法的形参列表要求一样
    • 构造器不能定义返回值类型,也不能使用void声明没有返回值,否则Java会把构造器当成方法来处理,就不再是构造器了。
      实际上,构造器是有返回值的,当使用new关键字来掉用构造器时,构造器返回该类的实例。可以把这个类的实例当成构造器的返回值,因此构造器的返回值总是当前类,无须定义返回值类型。注意:无需显式地使用return来返回当前类的对象,构造器的返回值时隐式的

    对象的产生和使用

    先创建一个Person类,Person.java

    public class Person {
        //定义两个成员变量
        public String name;
        public int age;
        //定义一个say方法
        public void say(String content) {
            System.out.println(content);
        }
    }
    

    PersonTest.java

    //使用Person类定义一个Person类型的变量
    Person p;
    //通过new调用Person类的构造器,返回一个Person实例
    //将该实例赋给p变量
    p = new Person();
    //也可以简写成
    //Person p = new Person();
    

    注:new Person()这里的括号指的是调用构造器,形参为无参。
    类名 对象名=new 类名();
    类名 对象名: 这个的解释是创建名称为“对象名”的“类名”类
    new :这个的解释是实例化对象
    类名() :这个的解释是无参数构造方法;
    new 类名(),就是说以无参数构造方法实例化对象;
    类名 对象名=new 类名():用指针的解释就是以无参数构造方法实例化对象并将这个对象的内存引 用赋给“类名”类的“对象名”[引用变量]`

    创建对象后可以使用了,主要有:

    • 访问对象的实例变量
    • 调用对象的方法(调用时必须为形参赋值)
      注意:static修饰的方法和成员变量,通过类和实例可以调用;没有static修饰,只能通过实例调用

    对象、引用和指针

    Person p = new Person();
    这行代码产生了两部分,p变量,Person对象。在内存中,Person类型的变量实际上是一个引用,存在栈内存中,指向实际的Person;真正的Person对象存在堆内存中。
    当一个对象被创建成功后,存放在堆内存中,java不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。Java里的引用相当于c里的指针,只是Java把指针进行了封装,避免开发者进行繁琐的指针操作。
    堆内存里的对象可以有多个引用,即多个引用指向同一个对象。

    //将p变量的值赋值给p2变量。这样p2、p均指向同一个对象
    Person p2 = p;
    

    对象的this引用

    this关键字总是指向调用该方法的对象。根据this出现位置的不同,this作为对象的默认引用,有两种情形:

    • 构造器中引用该构造器正在初始化的对象
    • 在方法中引用调用该方法的对象
      this关键字最大的作用是,让类中一个方法,访问该类的另一个方法或实例变量。
      示例:Dog.java
    public class Dog {
        public void jump() {
            System.out.println("正在执行jump方法");
        }
        //run方法需要借助jump方法
        public void run() {
            //使用this引用调用run方法对象
            //this可以省略
            this.jump();
            System.out.println("正在执行run方法");
        }
    }
    

    其他对象的一个方法依赖另一个方法的案例,如吃饭方法依赖使用筷子等,java允许对象的一个成员直接调用另一个成员,也可以省略this前缀。
    但是对于static修饰的方法而言,可以使用类来直接调用,如果使用this关键字,则无法指向合适的对象。即:静态成员不能直接访问非静态成员。
    `注意:这里要联合思考。static是允许用类名和对象调用的,但实际上不应该允许这样做。在编程中注意不要使用对象实例调用static修饰的成员变量、方法等,而应该使用类

    3、创建实例
    public static void main(String[] args) {
    Teacher gzhu = new Teacher("George Zhu", 30, 10000);
    System.out.println("Teacher: " + gzhu.getName());
    System.out.println("\tAge: " + gzhu.getAge());
    System.out.println("\tSalary: " + gzhu.getSalary());
    }

    main()方法是Java应用程序的入口点,每个Java应用程序都是从main()方法开始运行的。作为程序入口的main()方法必须同时符合以下几个条件:
    . 用public static修饰;
    . 返回类型为void;
    . 方法名为main;
    . 参数类型为String[];
    包含main方法的类又叫主程序类。

    类创建好之后,通过new关键字创建具体对象。它有以下作用:
    . 为对象分配内存空间,将对象的实例变量自动初始化为其变量类型的默认值;
    . 如实例变量显示初始化,将初始化值赋给实例变量;
    . 调用构造方法;
    . 返回对象的引用;

    相关文章

      网友评论

        本文标题:coreJava_3——类和对象

        本文链接:https://www.haomeiwen.com/subject/unvfvftx.html