精华内容
下载资源
问答
  • 类变量类变量的赋值有两次,两次都在类加载的过程中,类加载可以简单的分为加载,连接,初始化,其中连接又分为验证,准备,解析。第一次赋值在准备阶段:为类的静态变量分配内存,并将其初始化为默认值第二次赋值...

    在 Java 中,类变量,实例变量可以不经过主动赋值就直接使用,而局部变量在不主动赋值的情况下,是无法使用的。在下面分析一下这个原因:

    1. 类变量

    类变量的赋值有两次,两次都在类加载的过程中,类加载可以简单的分为加载,连接,初始化,其中连接又分为验证,准备,解析。

    第一次赋值在准备阶段:为类的静态变量分配内存,并将其初始化为默认值

    第二次赋值在初始化阶段:也就是执行 clint,就是自己的静态变量赋值和静态初始化块

    所以,即使没有为类变量赋值,也会在准备阶段赋默认值

    2. 实例变量

    在使用 new 创建实例的时候,在字节码的层次起码会有 new, invokespecial 这两条字节码语句,其中在 new 字节码执行的时候,会创建实例,并将其实例变量(包括本类及其全部父类所定义的每个实例变量)初始化为各自的默认值

    接着在执行 invokespecial 时,会执行 lint,也就是其中一个构造方法

    可见在实例变量的赋值过程中,也会有两次赋值,所以即使没有主动赋值,也已经有了默认值了

    3. 局部变量

    但是在局部变量中,局部变量是存储在局部变量表中的(引用和基本类型,引用所指向的对象还是在堆中的);而局部变量表是属于栈帧的一部分,虚拟机完全没有给这里赋初值,所以不赋初值是无法使用的

    总结

    通过上面的描述,可以知道,类变量和实例变更都存在一次自动的赋默认值的情况,所以类变量,实例变量可以不经过主动赋值就直接使用,而局部变量在不主动赋值的情况下,是无法使用的

    展开全文
  • golang 全局变量和局部变量的赋值

    千次阅读 2020-01-14 16:50:48
    测试连接数据库时候,遇到细节坑 var DbEngine *xorm.Engine func init() { // mysql, 用户名, 密码, ip, 端口, 数据库名称, 字符集 DbEngine, err := xorm.NewEngine("mysql", "root:111111@(192.168.1...

    测试连接数据库的时候,遇到的细节坑

    var DbEngine *xorm.Engine
    func init() {
    	// mysql, 用户名, 密码, ip, 端口, 数据库名称, 字符集
    	DbEngine, err := xorm.NewEngine("mysql", "root:111111@(192.168.1.116:3306)/my_go_chat?charset=utf8")
    	if nil != err {
    		log.Fatal(err.Error())
    	}
    	// 设置显示sql语句
    	DbEngine.ShowSQL(true)
    	// 设置数据库最大连接数
    	DbEngine.SetMaxOpenConns(2)
    	// 开始同步表结构
    	err = DbEngine.Sync2(new(User))
    	if nil != err {
    		log.Fatal(err.Error())
    	} else {
    		fmt.Println("Table `User` has been mounted")
    	}
    }
    

    当调用数据库的时候,遇到报错

    func Login(mobile string, pwd string) (User, error) {
    	temp := User{}
    	_, err := DbEngine.Where("mobile=?", mobile).Get(&temp)
    	// 其他操作
    	...
    	...
    }
    

    报错信息

    invalid memory address or nil pointer dereference
    

    调试模式追了好半天,好吧,原来是局部变量和全局变量混了,于是有了下边的测试代码

    var TestVar string
    func main() {
    	// **** TestVar 这样就变成了一个函数内的局部变量,并不是全局变量TestVar ****
    	//TestVar, err := test("glq")
    
    	// 这样就是两个变量都使用已定义的变量,所有可以为全局变量TestVar赋值
    	var err error
    	TestVar, err = test("zxj")
    
    	if nil != err {
    		fmt.Println("err = ", err.Error())
    	}
    	fmt.Println("TestVar = ", TestVar)
    	// 打印全局变量
    	print_var()
    }
    func print_var() {
    	fmt.Println("TestVar = ", TestVar)
    }
    func test(in string) (string, error) {
    	return strings.ToUpper(in), nil
    }
    
    展开全文
  • 成员变量的赋值调用 分两种情况: 成员变量被public修饰或者无修饰符,调用格式为: 对象名.成员变量 如:c.brand = “Porsche”; public class Car { String brand; public void drive() { int speed...

    在测试类CarTest的main方法里面创建对象c之后,如何对类Car的变量调用?

    成员变量的赋值调用

    分两种情况:

    1. 成员变量被public修饰或者无修饰符,调用格式为:
      对象名.成员变量
      如:c.brand = “Porsche”;
    public class Car {
        String brand;
        public void drive() {
            int speed;
        }
    }
    public class CarTest {
        public static void main(String[] args) {
            Car c = new Car();
            c.brand = "Porsche";
        }
    }
    1. 成员变量被private修饰时,则用setXxx,getXxx方法来赋值调值,略.

    局部变量的赋值调用

    换成局部变量的话,如果照搬成员变量的方式,那是完全不行的.可以在成员变量所在的方法上面传参返值.如下

    public class Car {
        String brand;
        public int drive(int speed) {
            return speed;
        }
    }
    public class CarTest {
        public static void main(String[] args) {
            Car c = new Car();
            c.brand = "Porsche";
            System.out.println(drive(330));
        }
    }
    展开全文
  • 批处理 概念: 批处理是一组Transact-SQL语句,其中可以包括变量和流程控制语句,由客户端应用程序一次性地发送到数据库服务器,SQL server的数据库服务器将批处理...局部变量的生存期从声明它的地方开始,直到声明
    • 批处理

    概念:

    批处理是一组Transact-SQL语句,其中可以包括变量和流程控制语句,由客户端应用程序一次性地发送到数据库服务器,SQL server的数据库服务器将批处理语句编译成一个可执行的单元,此单元称为执行计划,执行计划中的语句被逐条执行。

    • 变量的声明和使用

    1.局部变量的声明

    DECLARE @<变量名> <数据类型> [,···n]

    例:

    DECLARE @Num INTEGER,@Title Char(10)

    局部变量的生存期从声明它的地方开始,直到声明它的批处理、存储过程或函数结束

    2.局部变量的赋值与引用

    SET @<变量名>=<表达式>

    DECLARE @MaxGrade INT

    SET @MaxGrade=(SELECT MAX(Grade)*0.9 FROM Student_Elective WHERE StdId='09001')

    表达式中可以包含查询语句,但查询语句必须是单列单值或单列空值

    SELECT @<变量名>=<表达式>

    DECLARE @MaxGrade INT

    该格式的特点是允许查询结果为单列多行,赋给变量的为最后一行的值

    SELECT @MaxGrade=Max(Grade)*0.9 FROM Student_Elective WHERE StdId='09001'

    3.在查询分析器中输出变量的值

    PRINT 表达式

    declare @MaxGrade INT
    select @MaxGrade=MAX(Grade)*0.9 
    from Student_Elevtive
    where StdId='09001'
    print @MaxGrade

    4.全局变量

    @@VERSION:返回SQL server安装的日期、版本和处理器类型

    @@DBTS:返回当前TIMESTAMP数据类型的值

    @@ERROR:返回最后执行的Transact-SQL语句的错误代码

    5.流程控制语句

    (1)分支语句-IF

    IF <条件表达式>

    BEGIN

             <语句>[···n]

    END

    [ELSE

    BEGIN

             <语句>[···n]

    END]

    例:

    declare @BoyAvgGrade INTEGER
    declare @GirlAvgGrade integer

    select @BoyAvgGrade=AVG(Grade) 
    from Student a,Student_Elevtive b
    where a.StdId=b.StdId    and a.StdSex=1

    select @GirlAvgGrade=AVG(Grade) 
    from Student a,Student_Elevtive b
    where a.StdId=b.StdId    and a.StdSex=0

    if @BoyAvgGrade>@GirlAvgGrade
        print '男同学平均成绩高于女同学'
    else
        if @BoyAvgGrade=@GirlAvgGrade
            print '男同学平均成绩等于女同学'
        else
            print '女同学平均成绩高于男同学'

    (2)循环语句

    WHILE <条件表达式>

    BEGIN

    语句 [···n]

    [BREAK]

    [CONTINUE]

    语句 [···n]

    END

    declare @Id int,@lev int
    set @Id=8
    set @lev=0
    set @Id=(select pid from Code where id=@Id)
    while @Id!=0
    begin
        set @Id=(select pid from Code where id=@Id)
        set @lev=@lev+1
    end
    print @lev

    (3)RETURN语句

    RETURN [expression]

    结束程序,RETURN以后的程序将不被执行

     

     

     

    展开全文
  • 为什么说局部变量只有赋值一次机会呢? 为什么说局部变量只有赋值一次机会呢?
  • final关键字修饰局部变量:* 基本类型,是值不能被改变* 引用类型,是地址值不能被改变,对象中的属性可以改变=============================================================final修饰变量的初始化时机* 显示初始化...
  • 如图所示整型局部变量c未赋值,但是编译能通过,能运行 使用未赋值的整型局部变量c,编译无法通过
  • Concurrency-interest邮件列表中有人问了这么一个问题:ArrayBlockingQueue中有个对象字段lock,在ArrayBlockingQueue很多方法中,使用这个lock时都将其先赋值给一个局部变量,然后再通过局部变量调用lock上方法...
  • 局部变量与类变量的赋值与使用 现象 public class Main { // 类变量 public static int classVariable; public static void main(String[] args) { // 局部变量 int localVariables; System.out.println...
  • 通过正则表达式,实现加减昨晚在做计算器时候,被一个BUG搞懵比了。现在再看看,发现我好小白啊~~1 #8+5+6-52 num = input("please input:")3 sa = re.split(r'(\D)', num) #区配到非数字则分割456 def func(s):7...
  • 全局变量 局部变量 title > head > < body > < script language ="javascript" > var number = - 1 ; // 文档加载结束以后才执行 window.onload = function () { var height = 100...
  • final关键字修饰局部变量: * 基本类型,是值不能被改变 * 引用类型,是地址值不能被改变,对象中的属性可以改变 ============================================================= final修饰变量的初始化时机 * ...
  • --声明局部变量,并为之赋值 declare @name varchar(8) declare @no varchar(8) declare @sex char(2) declare @age int declare @address varchar(20) set @name='feiniao' set @no='s253002' set @sex='男...
  • 编写了一段代码后,出于规范化的要求,把某些...如果在函数中未使用对变量赋值,则变量采用的是已经在程序主体中的值或在其他函数中global 全局变量的值,这两个是等同的。 如果在函数中使用某些语句对变更赋值,则...
  • 会出现local variable ‘x’ referenced before assignment的错误是因为全局变量与局部变量同名时,当你想在函数内部中修改外部变量的值,python首先会认为该变量是局部变量,函数内部没有定义局部变量a=value,而...
  •  昨晚在做计算器时候,被一个BUG搞懵比了。现在再看看,发现我好小白啊~~     1 #8+5+6-5 2 num = input("please input:") 3 sa = re.split(r'(\D)', num) #区配到非数字则分割 4 5 6 def ...
  • 全局变量与局部变量的使用 全局变量即使声明在函数方法里面,只要该方法被调用过,便可在方法外访问到该变量 局部变量的销毁是在语句块的结束 do a=10 local b=20 print(a,b) end print(a,b) &gt;lua...
  • this.[成员变量] = [局部变量];

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,497
精华内容 2,998
关键字:

局部变量的赋值