Java对象和类

目录

Java类中包含的类型变量

成员变量和类变量的区别

静态方法

new关键字的作用

内部类

super与this的用法

构造函数的注意点


  • Java类中包含的类型变量

  1. 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁
  2. 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  3. 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

  • 成员变量和类变量的区别

   1、两个变量的生命周期不同

      成员变量随着对象的创建而存在,随着对象的回收而释放。

      静态变量随着的加载而存在,随着类的消失而消失。被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。静态随着类的加载而加载。而且优先于对象存在。

   2、调用方式不同

      成员变量只能被对象调用。

      静态变量可以被对象调用,还可以被类名调用。

   3、别名不同

      成员变量也称为实例变量。成员变量所属于对象。

      静态变量也称为类变量。  静态变量所属于类。

   4、数据存储位置不同

      成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

      静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

   5、成员变量只能被对象所调用 

      静态变量可以被对象调用,也可以被类名调用。

      所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据


  • 静态方法

   1、静态方法只能访问静态成员,不可以访问非静态成员。

      因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

   2、静态方法中不能使用this,super关键字。

      因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。


  • new关键字的作用

  1. 为对象分配内存空间
  2. 引起对象构造方法的调用
  3. 为对象返回一个引用。引用名称是存放的对象的地址。

  • 内部类

优点:可访问外部类私有属性(内部类的唯一优点)

缺点:破坏原有类的程序结构(属性,构造方法,普通方法,内部类)

class Out{
    private in age = 12;

    //内部类
    class In{
        public void print(){
            System.out.println(age);
        }
    }
}

public class Demo{
    public static void main(String[] args){
        Out.In in = new Out().new In();
        in.print();
        //或采用以下方式访问    
        /*
        Out out = new Out();
        Out.In in = out.new In();
        in.print();
        */
    }
}

  • super与this的用法

this:指向对象本身的指针,形参与成员名字重名,用this来区分

super:超(父)类对象的一个指针

用法示例:

class Person{
    public static void prt(String s){
        System.out.println(s);
    }

    Person(){
        prt("父类·无参数构造方法: " + "A Person.");
    }//构造函数(1)

    Person(String name){
        prt("父类·含一个参数的构造方法:"+"A person's name is " + name);

    }//构造函数(2)

}

public class Chinese extends Person{
    Chinese(){
        super();//调用父类构造方法(1)
        prt("子类·调用父类无参数构造方法:" + "A chinese coder.");
    }

    Chinese(String name){
        super(name);
        prt("子类·调用父类含一个参数的构造方法:" + "his name is" + name);
    }

    Chinese(String name, int age){
        this(name);//调用具有相同形参的构造方法(3)
        prt("子类:调用子类具有相同形参的构造方法:his age is " + age);
    }

    public static void main(String[] args){//主方法
        Chinese cn = new Chinese();
        cn = new Chinese("codersai");
        cn = new Chinese("codersai", 18);
    
    }
}

运行结果:


  • 构造函数的注意点

Java如果不定义任何的构造函数,会自动构造,但如果定义了任何一个构造函数,就不会再自动构造,需要自己定义全部的构造函数。

出错示例:

//一个带显式构造函数的类
Public class People{
    int age = 23;
        Public void getAge(){
            System.out.print("the age is " + age);
        }

    //显示声明一个带参数的构造函数,用于初始化年龄
    Public People(int a){
        this.age = a;
    }
}

//用这个类来实例化一个对象
People xiaoMing = new People(20); //使用带参数的构造函数来实例化对象
People xiaoMing2 = new People(); //ERROR:一旦显式定义了一个构造函数,就不会再生成默认的构造函数
xiaoMing.getAge(); //打印出来的年龄变为20

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值