精华内容
下载资源
问答
  • 实例变量

    2018-03-22 22:43:01
    实例变量实例变量声明在一个类中,但在方法、构造方法和语句块之外;当一个对象被实例化之后,每个实例变量的值就跟着确定;实例变量在对象创建的时候创建,在对象被销毁的时候销毁;实例变量的值应该至少被一个方法...

    实例变量

    • 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
    • 当一个对象被实例化之后,每个实例变量的值就跟着确定;
    • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
    • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
    • 实例变量可以声明在使用前或者使用后;
    • 访问修饰符可以修饰实例变量;
    • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
    • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
    • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。
    import java.io.*;
    public class Employee{
       // 这个实例变量对子类可见
       public String name;
       // 私有变量,仅在该类可见
       private double salary;
       //在构造器中对name赋值
       public Employee (String empName){
          name = empName;
       }
       //设定salary的值
       public void setSalary(double empSal){
          salary = empSal;
       }  
       // 打印信息
       public void printEmp(){
          System.out.println("名字 : " + name );
          System.out.println("薪水 : " + salary);
       }
     
       public static void main(String args[]){
          Employee empOne = new Employee("RUNOOB");
          empOne.setSalary(1000);
          empOne.printEmp();
       }
    }

    展开全文
  • 文章目录不共享实例变量共享实例变量解决方案 不共享实例变量 测试代码 public class MyThreadNotShared extends Thread { private int count = 5; public MyThreadNotShared(String name){ super(); this.set...

    不共享实例变量

    测试代码

    public class MyThreadNotShared extends Thread {
    
        private int count = 5;
    
        public MyThreadNotShared(String name){
            super();
            this.setName(name);
        }
    
        @Override
        public void run() {
            super.run();
            while (count > 0) {
                count--;
                System.out.println("Thread is " + this.currentThread().getName() + ", count is " + count);
            }
        }
    }
    
    public class TestInstanceNotShared {
        public static void main(String[] args) {
            Thread a = new MyThreadNotShared("A");
            Thread b = new MyThreadNotShared("B");
            Thread c = new MyThreadNotShared("C");
    
            a.start();
            b.start();
            c.start();
        }
    }
    
    # 输出:
    Thread is A, count is 4
    Thread is C, count is 4
    Thread is B, count is 4
    Thread is C, count is 3
    Thread is A, count is 3
    Thread is A, count is 2
    Thread is C, count is 2
    Thread is B, count is 3
    Thread is C, count is 1
    Thread is C, count is 0
    Thread is A, count is 1
    Thread is A, count is 0
    Thread is B, count is 2
    Thread is B, count is 1
    Thread is B, count is 0
    

    程序创建了3个线程,每个线程都有各自的count变量,不存在多个线程访问同一个实例变量问题。

    共享实例变量

    测试代码

    public class MyThreadShared extends Thread {
    
        private int count = 5;
    
        @Override
        public void run() {
            super.run();
            count--;
            System.out.println("Thread is " + this.currentThread().getName() + ", count is " + count);
        }
    }
    
    public class TestInstanceShared {
        public static void main(String[] args) {
            MyThreadShared myThread = new MyThreadShared();
    
            Thread a = new Thread(myThread,"A");
            Thread b = new Thread(myThread,"B");
            Thread c = new Thread(myThread,"C");
            Thread d = new Thread(myThread,"D");
            Thread e = new Thread(myThread,"E");
    
            a.start();
            b.start();
            c.start();
            d.start();
            e.start();
        }
    }
    
    # 输出:
    Thread is A, count is 3
    Thread is E, count is 0
    Thread is D, count is 1
    Thread is B, count is 3
    Thread is C, count is 2
    

    A线程和B线程获取到的count都是3,出现了非现场安全问题。

    对count的值处理分为3步(执行这些步骤的过程中会被其他线程所打断):

    1、获取count的值;

    2、计算count-1;

    3、计算结果对count赋值。

    A线程和B线程得出相同值的过程如下:

    线程/时间 1 2 3 4 5 6 7
    A 5 4 4
    B 5 4 4

    1、在时间单位为1处,A线程取得count变量的值为5。

    2、在时间单位为2处,B线程取得count变量的值为5。

    3、在时间单位为3处,A线程执行count–计算,将计算后的值4存储到临时变量中。

    4、在时间单位为4处,B线程执行count–计算,将计算后的值4也存储到临时变量中。

    5、在时间单位为5处,A线程将临时变量中的值4赋值给count。

    6、在时间单位为6处,B线程将临时变量中的值4也赋值给count。

    7、最终结果就是A线程和B线程得到相同的计算结果4,非线程安全问题出现了。

    解决方案

    增加synchronized关键字

    展开全文
  • python类的变量有类变量、实例变量和单个实例变量,“单个实例变量”是我的说法,更为规范的说法我还不能确切地知道。学习编程语言真是“一入编程深似海”,总是有那么多曲曲折折的坑,每一个坑都要花点时间去解决。...

    python类的变量有类变量、实例变量和单个实例变量,“单个实例变量”是我的说法,更为规范的说法我还不能确切地知道。学习编程语言真是“一入编程深似海”,总是有那么多曲曲折折的坑,每一个坑都要花点时间去解决。那些编书的人,往往不知道读者到底哪儿不懂。一个细节可能就让读者琢磨半天。所以自己趁着是初学者,把自己遇到的坑,感觉到模糊的地方都先写下来。比如在使用类的时候,对于类变量和实例变量的区别就开始就不清楚。为什么还要有单个实例变量,也不明白。今天基本上搞明白了,但或许还有不对的地方。

    1.类变量在所有实例当中高高在上,可以用类名进行操作,但不可以用实例进行操作。

    2.实例变量要在init里定义。

    3.单个实例变量在类外面定义,只针对单个实例有效,对其它实例无效。

    还是看例子吧

    #类变量、对象变量、具体实例变量的区分
    
    class Animal():
        "This is Animal species class."
        species="Animal"#类的静态变量,所有对象共享。
        count=0
        def __init__(self,name):
            self.name=name#z在init定义的是对象变量。
            self.attri=[]#并以“self."打头为对象变量,所有对象共享。
            Animal.count+=1#统计类的实例个数
        def add_attributes(self,attri):#为attri赋值的方法
            if(type(attri)==list):
                self.attri.extend(attri)
            else:
                self.attri.append(attri)
    
    cat=Animal("Tom")
    rat=Animal("Micky")
    dog=Animal("Pluto")
    
    li=["小型","哺乳动物","聪明"]
    cat.add_attributes(li)
    print(cat.attri)
    
    rat.add_attributes(li)
    rat.location="house"#专门对rat定义的变量,不能用于cat和dog等实例。
    rat.shuyao="dishasi"
    
    ratStr=",".join(rat.attri)#列表转字符串
    print("和老鼠相关的属性有:")
    print("包括:%s,"%ratStr+rat.location+","+rat.shuyao)#关于格式化的理解还需要提高
    
    print("类的实例个数是:%s"%Animal.count)#利用类调用类变量
    print("类的实例个数是:%s"%dog.count)#利用实例调用类变量,下面都是。
    Animal.count+=1
    print("类的实例个数是:%s"%cat.count)
    dog.count+=1#此句无法对类变量操作
    print("类的实例个数是:%s"%rat.count)

    输出为:

    展开全文
  • 1.Python中实例变量 class Test: def f(self, name): self.name = name def f1(self): print(self.name)#************************实例变量为实例对象特有数据************************ x1 = Test() #实例化...

    1.Python中实例变量

    class Test:
        def f(self, name):
            self.name = name
        def f1(self):
            print(self.name)
    #************************实例变量为实例对象特有数据************************
    x1 = Test() #实例化Test类,创建实例对象x1
    x2 = Test() #实例化Test类,创建实例对象x2
    #-------------设置实例属性----------
    #方式1
    x1.f("张三") #设置实例对象属性
    x2.f("李四")
    #方式2
    x1.name = 11 #设置实例对象属性
    x2.name = 22
    #======对于上述两种方式命名空间的分析======
    '''
    上述两种方式从表面看一样,都是self.xx = "oo"设置实例的属性,但是不完全一样

    方式1:
    在函数内赋值,变量的值均存在于函数局部命名空间,即实例的属性存在于该实例的函数属性的局部命名空间中
    因此直接访问此类属性只能在方法内部访问

    方式2:
    直接设置实例的属性,变量的值存在于该实例的局部命名空间
    因此访问直接访问此类属性,通过实例对象直接引用即可访问
    '''

    '''
    问题来了...
    如果按照上述分析,实例对象岂不是在不同命名空间中有多个同名属性?
    测试如下:
    '''
    x1.f("王五") #设置实例对象属性
    x2.f("赵六")
    x1.f1() #王五
    x2.f1() #赵六

    x1.name = "王八" #设置实例对象属性
    x2.name = "赵九"
    x1.f1() #王八
    x2.f1() #赵九

    '''
    通过上述测试可以发现
    1.实例对象和其方法共享同一命名空间
    2.实例变量为实例对象特有数据
    '''


    展开全文
  • python中类变量和实例变量详解

    千次阅读 2020-05-23 16:23:30
    python中类变量和实例变量详解 在了解类变量和实例变量之前,首先要知道类变量和实例变量的定义。 类变量:可在类的所有实例之间共享的值,就是指不是单独分配给每个实例,实例可以调用类变量。 实例变量:实例化...
  • java中类变量和实例变量

    万次阅读 多人点赞 2019-03-27 16:08:54
    java中所有的变量分为:(1)成员变量和(2)局部变量。 (1)成员变量包括: a) 实例变量 b)类变量(以static修饰) ... 变量修改:多个对象指向不同的实例变量堆内存,即实例变量的值只与对象相...
  • (类变量)静态变量和实例变量的区别?

    万次阅读 多人点赞 2017-07-21 21:34:29
    实例变量没有static修饰 (2)运行区别,实例区别 静态变量在类中,不属于实例对象,属于类所有,只要程序加载了字节码,不用创建实例对象静态变量就会被分配空间,已经可以使用。 实例变量是某个对象的属性,...
  • //实例变量 public void b() { int a=2; //局部变量 System.out.println("局部变量:a="+a); System.out.println("实例变量:a="+this.a);//局部变量的作用域内引用实例变量:this.变量名 } public stat...
  • python类变量和实例变量

    千次阅读 2018-08-09 16:32:06
    类变量 实例变量
  • 1、前言 相信同学们一定懵逼过,那是,不懵逼就不正常了,现在由我为了大家在轻松的氛围... b、局部变量:在函数内、在class的方法(构造、类方法、静态方法、实例方法)内(变量未加self修饰),这就是局部变量 ...
  • Java实例变量、类变量与局部变量

    万次阅读 多人点赞 2015-12-21 22:08:50
    一、实例变量 也叫对象变量、类成员变量;从属于类由类生成对象时,才分配存储空间,各对象间的实例变量互不干扰,能通过对象的引用来访问实例变量。但在Java多线程中,实例变量是多个线程共享资源,要注意同步...
  • 静态变量和实例变量的区别 所属的对象不同:静态变量是为所有对象共享的,即它是属于某个类的,而实例变量是属于某一个对象的,不具有共享性。 内存空间分配的不同:静态变量在类加载到内存的时候会对其进行分配...
  • 局部变量和实例变量

    千次阅读 2018-05-30 19:20:13
    对于很多java的初学者来说,局部变量和实例变量的区分都是一个模糊的概念,那么给大家提供从几个方面去看,就能轻松很多,帮助大家分清局部变量和实例变量,希望对您有帮助。...
  • 成员变量(全员变量) a.类变量(stastic修饰)改变 b.类变量也改变 和a....实例变量不影响 等于初始值 机制如下 创建类似就已经分配空间给类变量并初始化 而实例变量则是在创建实例时分配空间并初始化 ...
  • Python类变量与实例变量学习笔记

    万次阅读 2020-06-19 16:51:39
    # xy为实例变量 def __init__(self, x, y): self.x = x self.y = y if __name__ == '__main__': # a是实例A是一个类 a = A(2, 4) # 这里面xy就是实例变量,aa为类变量,a.aa会优先查找对象的变量,找不到则...
  • Python类变量和实例变量区别

    千次阅读 2019-07-25 19:01:41
    类变量:定义在类里面,通过类名或对象名引用,如果是通过对象名引用,会先找有没有这个同名的实例变量,如果没有,引用到的才是类变量,类变量的更新,只能通过类名,形如 类名.a = 55 ,不要指望通过实例引用类...
  • java中实例方法 静态方法 实例变量 静态变量之间的关系问题 静态变量可以方法静态方法 实例变量可以访问静态方法 实例变量可以访问实例方法 以上说法对么
  • 成员变量和成员方法是范围最大定义,简单而论成员变量包括实例变量和类变量,成员方法包括实例方法和类方法。 实例变量 实例变量定义在类中,但是在方法之外,前面没有static修饰,它在一个对象创建时创建,摧毁时...
  • 实例变量和局部变量

    2018-06-06 19:01:19
    1、在类下声明的变量角实例变量,通常要封装,用private。所有实例变量都有默认值。2、在方法下声明的变量角局部变量。局部变量没有默认值,必须初始化。3、个人体会,如果只在方法中运用到的变量,就不要在类下声明...
  • 被分为 类变量(static)和实例变量(木有static)。 有static则为类变量,没有就是实例变量。 局部变量: 被分为形参(在方法签名中定义),方法局部变量(在方法中定义),代码块局部变量(在代码块中定义)。 ...
  • 导读 学习Java的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别。... //成员变量、实例变量 private int age; //成员变量、实例变量 private int ID; ...
  • python类的变量类型分为:类变量、实例变量(也叫它成员变量)、局部变量 举个栗子: class Test: var01 = "我是类变量" def __init__(self): var02 = "我是实例变量" def myfunction(self): var03 = ...
  • 实例变量与类变量的区别

    万次阅读 2018-07-31 19:11:20
    实例变量也叫做对象变量,类变量也叫做静态变量 它们区别在于:实例变量为所属对象所私有,而类变量为所有对象所共有 如果一个对象将类变量的值进行改变,那么其他对象将不能改变他的值;而实例变量则是为对象所...
  • 实例变量:顾名思义,变量是跟着实例走的,上面的例子,每次new一个对象,实例变量normal就会被系统分配一次内存空间,并且staticTest1实例下的normal变量与staticTest2实例下normal变量是没有关系的,各有一份, ...
  • 全局变量又叫成员变量,它是声明在类里,函数,静态语句块外的变量,全局变量又分为类变量(静态变量)、实例变量两种. 通过代码来看一下: private inti;//实例变量 private static int j;//类变量 实例变量总是通过对象...
  • 创建一个 Person 类,该类中有一个类成员变量 country、一个实例变量 name 和另一个实例变量 age。 country 表示地区,name 表示姓名,age 表示年龄。 创建 3 个 Person 对象,并分别给这3个对象的属性赋值。 ...
  • python 实例变量

    2016-08-23 19:16:26
    python 实例变量python的实例变量不需要声明的动作,使用相当于一个局部变量,可以在构造函数中通过self.name初始化,也可在创建实例之后,通过instance.name绑定,实例变量还可以通过del语句删除class Test(object)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,067
精华内容 35,626
关键字:

实例变量