0
点赞
收藏
分享

微信扫一扫

局部变量、成员变量、引用类型、this、static

49路末班车 2022-04-16 阅读 90
java

一、局部变量和成员变量

局部变量:定义在方法中的变量称之为局部变量。
作用域:从定义的位置开始到整个方法结束。
成员变量:定义在方法外,类内的变量叫做成员变量(全局变量)。
作用域:整个类体内。

区别:
1.声明位置不同:局部变量在方法中;成员变量在类体中。
2.作用范围不同:局部变量是当前类的方法,成员变量是当前的方法。不同的方法中即使有同名的局部变量也互不影响。
3.内存存放的位置的:局部变量在栈内存中,成员变量在堆内存中。
4.成员变量有默认值;局部变量没有默认值。

代码输出结果:20 20 10 30 10

public class VarDemo {

    static int age=20;

    public void test(){
        System.out.println(age);
        age=10;
        System.out.println(age);
        int age=30;
        System.out.println(age);
    }

    public void show(){
        int a=10;
        String name="Alen";
        System.out.println(age);
    }

    public static void main(String[] args){
        System.out.println(age);
        new VarDemo().test();
        System.out.println(age);
    }
}

二、引用类型

Java语言中除基本类型之外的变量类型都称之为引用类型。
Java中的对象和数组是通过引用对其操作的。
引用可以理解为一种受限的指针
指针时可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算的。引用不行,只能进行赋值运算。
引用就是一个变量或对象的别名(引用的本质是一个对象);指针是一个段内存空间的地址(指向存储一个变量值的空间或一个对象的空间)。

三、内存分析

栈(static):
存放:局部变量
先进后出,自上而下存储
方法执行完毕,自动释放空间
堆(heap):
存放new出来的对象
需要垃圾回收器来回收:System.gc()
方法区(method area):
存放:类的信息(代码)、static变量、字符串常量等。

四、构造方法

创建对象的时候默认会调用构造方法来创建对象,(在堆中开辟空间),可以完成某些成员变量的初始化操作。

构造方法的语法:
方法名称:构造方法名称必须跟类的名称保持一致。
访问修饰符:略。
形参:可以用户定义添加,跟方法的普通参数一样。
方法体:完成对象的初始化功能。
返回值:没有返回值。

注意:
1.创建完类之后,如果没有手动调用构造方法,会有一个默认的无参的构造方法供调用。
2.当用户自定义了构造方法之后,默认的无参构造方法就不能够使用了,必须要手动定义无参构造方法。
3.同一个类中可以包含多个同名的构造方法。

重载:
在一个类中可以包含多个重名的方法,但是注意方法的参数列表不能相同。
三个方面的不同:
1.参数的个数不同
2.参数的类型不同
3.参数的顺序不同

注意:
一般构造方法都会进行重载(一个类中可能包含多个属性值,当只需要给部分属性初始化的时候需要调用不同的构造方法)。

代码输出结果:Marry 30 haha lisa 29 hihi Bob

public class Teacher {

    String name;
    int age;

    public Teacher(){

    }

    public Teacher(String Name){
        System.out.println("hihi");
        name=Name;
    }

    public Teacher(String Name,int Age){
        System.out.println("haha");
        name=Name;
        age=Age;
    }

    public void teach(){
        System.out.println("start");
    }

    public static void main(String[] args){
        Teacher teach =new Teacher();
        teach.name="Marry";
        teach.age=30;
        System.out.println(teach.name);
        System.out.println(teach.age);

        Teacher teacher2=new Teacher("lisa",29);
        System.out.println(teacher2.name);
        System.out.println(teacher2.age);

        Teacher teacher3=new Teacher("Bob");
        System.out.println(teacher3.name);
    }
}

五、构造器

构造器定义:constructor构造方法。
一个在创建对象时被自动调用的特殊方法。

构造器作用:
为对象进行初始化(成员变量)工作。

构造器是一种特殊的方法:
构造器的方法名必须和类名一致。
构造器虽然没有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能构造器里调用。
如果我们没有定义构造器,则系统会自动定义一个无参的构造方法。如果已定义,则编译器不会添加无参构造方法。
与普通方法一样,构造方法也可以重载。

例题:定义一个“点”(Point)类用来表示二维空间中的点标。要求如下:
1.可以生成具有特定坐标的点对象。
2.提供可以设置两个坐标的方法。
3.提供可以计算该“点”距另外点距离的方法。

public class Point {
    int x;
    int y;

    public void set(int xx,int yy){
        x=xx;
        y=yy;
    }

    public double calcDistance(Point p){
        return Math.sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y)-y);
    }

    public static void main(String[] args) {
        Point p1=new Point();
        p1.set(3,0);
        Point p2=new Point();
        p2.set(0,4);
        System.out.println(p1.calcDistance(p2));
    }
}

六、this关键字

this的作用:
this表示的是当前对象本身,更准确地说,代表当前对象的一个引用。

普通方法中使用this
区分类成员属性和方法的形参。
调用当前对象的其他方法(可以省略)。

构造方法中使用this
当构造方法中的参数名称跟类的成员变量名称一样的时候,可以使用this代表当前对象。
位置:必须是第一条语句。

this不能用于stati方法。

理解代码:

public class ThisDemo {
    String name;
    int age;

    //构造方法中使用this
    public ThisDemo(String name,int age){
        this.name=name;
        this.age=age;
    }

    //普通方法中使用this
    public void test1(){
        System.out.println("test1");
    }
    public void test2(){
        System.out.println("test2");
        this.test1();
        //成员变量中使用this
        System.out.println(this.name);
    }

    public static void main(String[] args) {
        ThisDemo td=new ThisDemo("Lili",40);
        System.out.println(td.name);
        System.out.println(td.age);
        td.test2();
    }
}

七、static关键字

在类中,用static声明的成员变量为静态成员变量,或者叫做:类属性,类变量。
普通变量在使用的时候,必须要通过对象名进行调用。
类变量或者静态变量可以使用对象名也可以使用类名进行调用。
静态变量在创建对象之前被初始化,或者说在类被载入之前进行初始化。
成员变量在堆中,static变量置于方法区中。
静态变量不能定义在静态方法中进行调用。
静态方法中不能直接调用非静态方法。

用static声明的方法为静态方法
不需要对象,就可以调用(类名.方法名)。
在调用该方法时,不会将对象的引用传递给它,所以static方法中不可访问非static的成员。
静态方法不能以任何方式引用this和super关键字。

静态属性的访问形式
(1)对象名.属性
(2)类名.属性

静态方法
访问修饰符static返回值类型 方法名(){}

访问形式
(1)对象名.方法名();
(2)类名.方法名();

理解代码:

public class StaticDemo {
    String name="Alen";
    static int age=10;

    public static void main(String[] args){
        StaticDemo staticDemo=new StaticDemo();
        //使用对象进行调用
        System.out.println(staticDemo.name);
        System.out.println(staticDemo.age);//10

        staticDemo.age=20;
        System.out.println(staticDemo.age);//20
        System.out.println(StaticDemo.age);//20

        StaticDemo.age=30;
        System.out.println(staticDemo.age);//30
        System.out.println(StaticDemo.age);//30

        StaticDemo staticDemo1=new StaticDemo();
        System.out.println(staticDemo1.age);

        //使用类名调用,报错
        //System.out.println(StaticDemo.name);
        //System.out.println(StaticDemo.age);
    }
}
举报

相关推荐

0 条评论