首页 > 其他 > 详细

局部变量和成员变量

时间:2021-05-25 23:46:13      阅读:39      评论:0      收藏:0      [点我收藏+]

局部变量和成员变量


局部变量和成员变量区别

  1. 声明位置不同:类中 方法中

  2. 作用范围不同:当前类的方法 当前方法

    不同的方法中即使有同名的局部变量,没有关系,互补影响,建议相同

  3. 内存存放的位置:栈内存 堆内存

  4. 成员变量有默认值,局部变量没有默认值


数据类型

技术分享图片

Java中的对象和数组是通过引用对其操作的

  1. 引用可以理解为一种受限的指针

  2. 指针是可以进行与整数做加减运算,两个指针之间也可以进行大小比较

  3. 引用不行,引用智能进行赋值运算

  4. 引用就是一个变量或对象的别名(引用的本质是一个对象);指针是一个段内存空间的地址

    (指向存储一个变量值的空间或者一个对象的空间)


内存分析

栈:STACK--->属于一种数据结构

1.存放:局部变量

 2. 先进后出,自上而下存储
  3. 方法执行完毕,自动释放空间

堆:HEAP

1.存放new出来的对象

2.需要垃圾回收器来回收:System.gc()

方法区:METHOD

  1. 存放:类的信息(代码),static变量,字符串常量等

技术分享图片

构造方法:模具

 public class Teacher{
       String name;
       int age;
    public Teacher(String name,int age){
           System.out.println("new....");
           name = name;//都被当成局部变量,以后通过this指针来解决问题
           age = age;
      }
       public void teach(){
           System.out.println("上课");
      }
  }
?
?
   public static void main(String[] args) {
?
           Teaher teach = new Teacher();
           teach.name = "连";
           teach.age = 18;
/**
* 为什么要有构造方法?
* 构造方法相当于模具,汽车造出来需要轮子,座椅等等
*
* 我写一个name和age就要写一遍?有100个对象,就要赋值100遍?
* 构造方法:
* 创建对象的时候,默认会调用构造方法来创建对象(在堆中开辟空间,来完成对象初始化操作)
*
* 1.创建完类之后,如果没有手动调用构造方法,会有一个默认的无参构造方法供调用
*/

重载

在一个类中可以包含多个重名的方法,但是注意方法的参数列表不能相同

三个方面同:

1.参数个数不同

2.参数类型不同

3.参数顺序不同

this关键字

1.this的作用

this表示的是当前对象本身

更准确说,this代表当前对象的一个引用(放在堆空间中,指向当前对象本身/可以理解为首地址)

2.构造方法:

当构造方法中的参数名称跟类的成员变量名称一样的时候,可以使用this代表当前对象,注意:有了this之后,可以将构造方法的参数跟成员变量保持一致

当构造方法中需要调用其他的构造方法时,可以使用this()

必须位于第一行

3.普通方法:

当多个普通方法之间需要调用的时候,可以使用this来进行相互调用,指的是当前对象的其他方法

4.成员变量的使用:

当方法中的参数名称和成员变量保持一致的时候,使用this.表示的是对象的值,而使用变量名表示的是形参

public void test2(String name){
   System.out.println("test2");
   test1();
   System.out.println(name);--->参数里的name值,传入进来的
   System.out.println(this.name);---->成员变量的属性
}
?
this.name = name -->将形参name赋值给了当前对象里面
?
?

this不能使用与static方法

Static关键字

1.在类中,用static声明的成员变量为静态成员变量或叫类属性、类变量,它为该类的公用变量,属于类,被该类的所有实例共享,在类被载入时被显式初始化,对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享

可以使用 “对象.类属性" 来调用 ,不过,一般都是用 ” 类名.类属性“

static 变量置于方法区中

2.用static声明的方法为静态方法

不需要对象,就可以调用(类名.方法名)

在调用该方法时,不会讲对象的引用传递给它,所以在static方法中不可访问非static的陈冠

静态方法不能以任何方式引用this和super关键字

/**
* static:
* 修饰成员变量的时候,表示静态成员变量或者类变量
* 普通变量在使用的时候,必须要通过对象名进行调用
* 类变量或者静态变量可以使用对象名调用,也可以使用类名进行调用
* 注意:
* 静态变量:在创建对象之前被初始化,或者在类被载入之前进行初始化
* 静态变量被所有的对象共享,属于公共变量,对象和类都可以直接调用,但是推荐使用类来调用
* 成员变量放在堆中,而静态变量放在方法中的静态区
*
*
* 1.修饰方法的时候,表示静态方法或者类方法
* 2.普通方法在使用的时候,必须要通过对象名进行调用
* 3.类方法或者静态方法可以使用类名,也可以使用对象名
* 4.静态变量不能定义在静态方法中
* 5.静态方法可以在非静态方法中进行调用(非静态方法创建时,静态方法已存在)
* 6.静态方法中不能直接调用非静态方法()
*/

技术分享图片

Java 中的 static 使用之静态变量

public class staticDemo2 {
   String name;//非静态变量
   static int age= 20;//静态变量
?
   //在非静态方法中/普通成员方法中,调用非静态变量和静态变量
   public void print(){
       System.out.println(name);
       System.out.println(age);
  }
?
   //在静态方法中,调用非静态变量和静态变量
?
   public static void print2(){
       //System.out.println(name);
       // Error:(13, 28) java: 无法从静态上下文中引用非静态 变量 name
?
       //如果希望在静态方法中调用非静态变量,可以通过创建类的对象
       //然后通过对象来访问非静态变量
       System.out.println(new staticDemo2().name);
       System.out.println(age);
  }
?
   //非静态方法中调用静态方法是可以的
   public void show(){
       show2();
       System.out.println("show not static");
  }
   //静态方法中调用非静态方法,是不可以的
   public static void show2(){
       //show();
       //Error:(29, 9) java: 无法从静态上下文中引用非静态 方法 show()
       System.out.println("show static");
  }
   public static void main(String[] args) {
       //直接使用类名调用静态方法
       staticDemo2.print2();
?
       //通过引用调用
       staticDemo2  st = new staticDemo2();
       st.print2();
  }
}
?



局部变量和成员变量

原文:https://www.cnblogs.com/hyz051202020/p/14810600.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!