【百日精通JAVA | 第二篇】类的实例化

一、类的实例化

new关键字来创建一个对象的实例化,使用.来访问对象中的属性和方法。

new的对象都是在堆上进行创建的,例如Student stu = new Student(); new Student是在堆上创建的,访问这个类的时候,Student stu是在栈上创建的,其中stu保存的是这块空间的地址。

class WashMachine
{
    public String brand;
    public String type;
    public double weight;
    public double length;
    public double height;
    public String color;
    public void washClothes()
    {
        System.out.println(brand+"开始洗衣服");
    }
    public void dryClothes()
    {
        System.out.println("脱水功能");
    }
    public void setTime()
    {
        System.out.println("定时功能");
    }

}



class Test
{
    public static void main(String[] args) {
      //washMachine 叫做引用,存了对象的地址
        WashMachine washMachine =   new WashMachine();
        washMachine.brand = "格力洗衣机";
        washMachine.washClothes();

    }
}

二、this引用

        哪个实例化对象,调用,this指向哪个对象

三、构造方法

这个方法较为特殊,这个方法没有返回值,方法名和类名是相同的。

当我们实例化类的时候,编译器会默认生成一个不带参数的构造方法;一旦我们自己写了一个构造方法编译器不再自动生成不带参数的构造方法了,构造方法和实例化的类名是相同的.

如果我们在类中创造了一个带参数的构造方法,但是实例化时,类没有添加参数,此时会报错

一个对象的产生至少有以下两步:

        1.为对象分配内存

        2.调用合适的构造方法。

成员变量在没有初始化的时候,都有一个默认值。

引用类型的值为null。

说明,实例化的该类不指向任何地址。

Student stu = null;

四、封装

面向对象程序的三大特性:封装、继承、多态

被private修饰的属性,只能在类当中使用。

五、封装扩展之包

        包其实时java当中组织类的一种方式。包时对类、接口等的封装机制的体现。是一种对类或者接口等的很好的组织方式。

        包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

        通配符,可以充当任何类。

我们创建的这个包,在路径底下的显示其实是三个不同级的文件

六、代码块

        代码块的概念以及分类

        使用{}定义的一段代码称为代码块。根据代码定义的位置以及关键字,又可以分为四种:

  •         普通代码块
  •         构造块
  •         静态块
  •         同步代码块

         普通代码块

构造代码块

        

 静态代码块

        专门用于初始化静态变量

七、继承和多态

        继承

                当我们,看到几个类当中,有共同的变量和方法的时候,我们可以将这些共性提取出来。

                被继承的类,称之为父类,基类,超类

                继承的类,被称之为子类

                子类对象,除了有自己的属性和方法还有父类的属性、方法;最终构成了子类对象。

class Animal
{
    public String name;
    public int age;
    public void eat()
    {
        System.out.println(age+"在吃");
    }

}
class Dog extends Animal
{
    public void bark()
    {
        System.out.println(this.name + "在狗叫");
    }
}

class Cate extends  Animal
{
    public void mimi()
    {
        System.out.println(this.name + "在喵喵");
    }

}
public class TestDemo {
    public static void main(String[] args) {
     Dog dog = new Dog();
    dog.age = 18;
    dog.name = "DD";
    dog.bark();
    }
}

   注意:

        子类会将父类中的属性集成到子类当中

        子类继承父类之后,必须要新添加自己特有的成员,体现出与基类的不同。

        如果子类和父类中的属性冲突了,优先访问子类中的属性

        子类当中必须有其特有的元素,否则完全没必要进行继承

        可以通过super关键字访问父类对象。

     

   super和this关键字只能在静态方法中进行使用

编译器会默认生成一个,在子类中形成一个父类初始化

八、 面试题:this和super的区别?

        this和super只能在类的非静态方法中进行使用,用于访问非静态成员的方法和字段。

        super用于父类引用,this用于当前类的引用

        this用于访问本类的方法和属性,super用于访问父类的方法和属性

        super当用户不写时,编译器会自动生成。

九、再谈初始化

        如果一个类被final修饰了,则该类无法再被继承了。

        

         java不支持多继承理念。