Java中变量类型等概念区分:变量类型、访问控制符、抽象类与接口

一、局部变量、成员变量和类变量

1.1 区分表

   我先将局部变量、成员变量和类变量的区分表放在前面,以后的内容也会这样,先把区分表放在内容之前。后面会详细地对概念进行解释,帮助同学们更深入地理解概念。如果是仅仅想看他们的区别的话,可以只看第一部分。

 局部变量成员变量类变量
声明位置方法或程序块类中方法外类中方法外
生命周期方法或程序块随对象的创建和销毁类第一次调用生成,程序结束销毁
默认值0、null、false、0.00、null、false、0.0
修饰符不可修饰访问修饰符,一般为privatestatic、final和访问修饰符,一般为private
内存分配栈内存堆内存静态存储区
其他类中的使用方式不可使用对象名.变量名类名.变量名

1.2 概念区分

1、局部变量:代码和程序块中的变量,只在代码和程序块中使用。局部变量存储在栈内存中,随代码和程序块的结束而销毁。局部变量没有修饰符。由于其内存会随着代码和程序块的结束而被销毁,所以在其他的方法和类中无法直接调用局部变量,除非是该代码和程序块的子程序块。

2、成员变量:在类中定义的变量和方法叫做成员变量和成员方法。成员变量与成员方法在类中同级,通常成员变量定义在成员方法之前,成员变量可以在类的成员方法中被使用。可以通过访问修饰符private、protected和public来进行修饰,如果不加访问修饰符,则默认其为default修饰,不同修饰符对变量产生的影响会在下面的访问修饰符内进行区分。

    由于Java的封装性,我们一般使用private修饰符修饰成员变量。在成员方法中直接使用成员变量的变量名或者通过“this.变量名”进行调用。在Java中我们在构建一个类的对象的时候,会通过类构造方法对类的成员变量进行赋值。如果没有定义构造方法,Java会自动生成一个不带参数的构造方法,为根据对象的成员变量的类型为其赋初始值,一般为0、null、false、0.0。

    在理解上,我认为成员变量属于对象,而类变量属于类。因为成员变量的构建和销毁是跟随对象的,而类变量则是存储在静态存储区,被所有类的对象所共享。

3、类变量:类变量和成员变量定义在一起,在某种角度来看,它算作一种特殊的成员变量,只不过它除了可以使用“对象.变量名”来进行调用,还可以通过类来进行调用,如果它是public的。这里注意,所有成员方法可以正常调用类变量,静态方法只能调用类变量。

   类变量同样可以使用访问修饰符来进行修饰,但是它需要使用static来进行修饰。存储的位置也变成了静态存储区。除此之外,它还可以使用final来进行修饰,被final修饰后,它就相当于一个类的常量,无法被修改,且只能通过类进行调用。

1.3 实例验证

   我们定义一个Person类,内容如下。为了示范他们的功能,我们这里尽量简化代码。我们可以看到类变量可以在成员方法中使用。但是被final控制的那个无法再进行赋值。

public class Person {
    //静态变量
    private static Integer personCount;
    public static final String disc = "善良";
    //成员变量
    private Integer personNum = 0;

    public Person(Integer personNum) {
        //局部变量
        int tmpInt = 1;
        this.personNum = personNum;
        personCount++;
    }

    public void printPerson(){
        System.out.println(personNum+personCount+disc);
        /*错误,不可赋值
        disc = "中二";*/
    }
}

    我们再定义一个类,使用Person。可以看出一个公共的类变量可以通过类名直接进行调用。

public class TestSeason {
    public static void main(String[] args) {
        Person person = new Person(1);
        System.out.println(Person.disc);
        System.out.println(person.disc);
        person.printPerson();
    }
}

二、访问控制修饰符

2.1 区分表

修饰符当前类同包类不同包子类不同包除子类子类重写方法的控制符
publicYYYYpublic
protectedYY可继承,不可调用Nprotected、public
defaultYYNNdefault、protected、private
privateYNNN不可重写

如果你觉得这样还是不好理解,可以这样想:

1、访问控制的宽松度:public>protected>default>private,在继承的时候可以越来越宽松

2、default只能在同包的类中使用,当然,不是这个方法的子类无论在那里都无法重写父类方法。

3、protected因为宽松度比default大,所以default能使用的地方,它一定可以。而它控制的方法一定能够被该类的子类重写。

2.2 概念区分

   访问控制符是用来控制成员变量、成员函数和内置类的访问权限,一般我们会将成员变量的访问权限设置为私有,方法设置为共有。我们可以显式设置变量或方法为public、protected和private,如果不设置则为default。这里就不对概念做太多解释了,权限控制,在上表中已经说的很清楚了。

三、抽象类与接口之间的区别

 抽象类接口
是否可以被多继承NY
方法抽象可以,但不必须必须全部
方法静态可以,但不必须N
方法公有可以,但不必须必须是
方法是否有具体实现YN
变量修饰符没有要求public static final
是否有构造方法可以有N
声明关键字abstractinterface
是否可以实例化对象YN

四、static和final之间的区别

 finalstatic
修饰属性、方法、类(包括内部类)、局部变量属性、方法、代码段、内部类
初始化编译或运行编译
修饰属性创建后不可修改,相当于常量,可以在构造函数中初始化所有该类对象所共有
修饰方法不能被重写只能使用类进行直接调用

暂时只有这四个概念是我觉得比较模糊的,如果大家有哪里看不懂或者有其他分不清的概念,可以给我留言,我会继续补充

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值