• java python构造器&变量的区别


    一、java构造器

    Java构造器的本质作用就是为对象初始化,即为实例变量初始化,赋初值;

    而不是创建对象,创建对象时通过new关键字来完成的,当使用new 关键字时就会为该对象在堆内存中开辟一块内存,只等构造器来初始化这块内存,为实例变量赋初始值。在未赋初始值之前是默认值。看代码中的构造器和编译后构造器是不一样的,编译后的构造器包含了更多的内容。

    构造器可以用来在初始化对象时初始化成员变量。

    1. public class mystudent {
    2. Integer age;
    3. String name;
    4. public static String addr = "beijing";
    5. mystudent(Integer age,String name){
    6. this.age = age;
    7. this.name = name;
    8. }
    9. }

    构造器,是用来初始化成员变量age 和 name的。

    这里的 age,与name是实例变量,类是不能直接调用,只能通过对象来调用。

    但是 addr是 静态变量,类是可以直接调用的

    mystudent.addr

    静态变量和实例变量的区别是:

    • 静态变量被所有实例对象共享,在内存中只有一个副本,当且仅当类初次加载时被初始化。
    • 实例变量是实例对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个实例对象拥有的副本互不影响。


     

    二、python __init__ 初始化

    python 没有构造器,但是有__new__ 与  __init__

    __new__ 创建对象

    __init__ 初始化对象

    Python类变量、实例(成员)变量和局部变量

    原文地址:

     Python类变量、实例(成员)变量和局部变量_青果HA的博客-CSDN博客

     

    2.1.类变量

    下面介绍类变量的两种定义方式、两种读取方式、在类里面的调用方式

    定义

    1.类里定义的,与构造函数、普通函数是一个级别缩进的。(下面例子里的num)

    2.在类外定义的,直接用类名.变量名新增类变量。(下面例子里的myvar)

    读取

    1.直接用类名的属性 获取:类名.类变量  (下面例子里的Member.num和Member.myvar)

    2.先实例化类,实例化对象的属性 获取 :实例对象.类变量 (下面例子里的M.num和M.myvar)

    调用

    1. 在类里面调用:类名.类变量,不能直接用类变量,即应为Member.num而不是num

    1. # -*- coding: utf-8 -*-
    2. class Member():
    3. num=2 #类变量,可以直接用类调用,或用实例对象调用
    4. def __init__(self,x,y):
    5. self.x=x #实例变量(成员变量),需要它是在类的构造函数内以self.开头来定义的
    6. self.y=y
    7. def add(self):
    8. total=2 #局部变量
    9. self.vara=3 # 虽是以self.给出,但并没有在构造函数中进行初始化
    10. self.varb=4
    11. fina=(self.x+self.y)*total
    12. return fina
    13. def fuc(self,a,b):
    14. self.varc=a #成员变量,他们在成员函数fuc()中定义
    15. self.vard=b
    16. self.x+=2
    17. self.y+=2
    18. self.vara+=3
    19. self.varb+=Member.num
    20. Member.myvar = 'huhuh'
    21. print(Member.num,Member.myvar)
    22. M=Member(1,2)
    23. print(M.num,M.myvar)

    2.2 实例(成员)变量


    (1)构造函数里的成员变量:

    定义:在__init__(self,成员变量)

    读取:只能实例对象.成员变量,不能类名.成员变量,即只能M.x不能Member.x

    调用:构造函数的成员变量,顾名思义:在类实例化的时候,就需要给该变量赋值。类里的普通函数可直接调用该变量,方式为:self.成员变量,

    作用范围:类里面的全局变量,其值可以被其他函数修改

    (2)普通函数里的成员变量

    定义:在类里的普通函数def xxx(self,成员变量)

    读取:只能实例对象.成员变量,不能类名.成员变量,即只能M.vara不能Member.vara

    调用:方式为self.成员变量,只有在类实例化后调用该普通函数,此时,该成员变量才会生,看下面的例子:必须先调用add函数后,fuc函数里的self.vara和self.varb才会正常执行,不报错。

    作用范围:类里面的全局变量,其值可以被其他函数修改

    3.局部变量

    局部变量相对就简单很多了,跟不在类里面的def函数的局部变量是一样的。

     作用范围:该函数内部

    总结:成员函数

    1.不同点

    (1)构造函数里的成员变量,在类实例化之后,就可以使用

    (2)在类里普通函数里的 成员变量,只能先调用该函数,才能使用该成员变量。

    2.相同点:

    (1)在类里,都是全局的

  • 相关阅读:
    如何下载并安装jdk13版本
    实现注册手机号用户
    java进程CPU飙升
    线上论坛之单元测试
    【Matlab笔记_16】yyyy-MM-dd HH:mm:ss的datetime格式拆分为yyyy-MM-dd日期部分和HH:mm:ss时间部分
    INDEMIND:渗透率不足10%,扫地机器人为何成了“存量市场”?
    [Spring] Bean生命周期
    微信小程序云开发-云函数发起https请求简易封装函数
    记一次 .NET 某金融企业 WPF 程序卡死分析
    实现深拷贝和浅拷贝
  • 原文地址:https://blog.csdn.net/qq_39208536/article/details/125407143