赋值语句

Java JVM 从程序员的角度看对象初始化过程,变量加载顺序及内存分配

你说的曾经没有我的故事 提交于 2020-01-22 22:49:31
专栏原创出处: github-源笔记文件 , github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。 Java JVM-虚拟机专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java JVM-虚拟机 一、前言 前面我们分析过 从虚拟机的角度看对象的创建与访问 。 现在我们站在程序员角度,来看一下我们定义的一个个类及类里面的成员变量是怎么初始化的,分别什么时候初始化,以及初始化顺序和内存分配。 公网上的文章写一堆代码打印一些信息进行分析,有些把语句块的加载顺序都下结论了,这种理解对于初学者来说可行,但是随着深入的学习我们应该试着从虚拟机角度去分析整个过程。 本文从字节码及类加载过程结合虚拟机内存模型进行分析,无需进行大量源码打印,愿意验证的朋友可以采用该方法进行更复杂的初始化过程分析。 首先我们统一一下概念: 类变量,表示 static 修饰的成员变量 类常量,表示 static final 修饰的基本数据类型与字符串成员变量 静态语句块,使用 static{} 包起来的语句块 实例变量,表示随着类初始化而初始化的成员变量 实例构造器语句块,使用 {} 包起来的语句块 class Father { // 类常量 public static final String STATIC_FINAL = "static-final-Father" ; // 类变量

两周自制脚本语言-第9天 设计面向对象语言

半城伤御伤魂 提交于 2020-01-22 00:30:59
第9天 设计面向对象语言 目标:为Stone语言添加类和对象的支持。仅支持单一继承 9.1 设计用于操作类与对象的语法 添加的类与对象的处理功能后,下面的Stone语言就能被正确执行了 class Position { x = y = 0 def move(nx,ny) { x = nx; y = ny } } p = Position.new p.move(3, 4) p.x = 10 print p.x p.y 首先定义一个Position类,方法由def语句定义。类中字段通过变量表示,并赋了初始值。上面的例子定义了move方法以及字段x与y。 类名后接.new组成的代码表示创建一个对象。为简化实现,这里规定Stone语言无法定义带参数的构造函数。 如果希望继承其他的类,只需在类名之后接着写上extends即可。例如,下面的代码能够定义一个及程序Position类的子类Pos3D class Pos3D extends Position { z = 0 def set(nx,ny,nz) { x = nx;y = ny;z = nz } } p = Pos3D.new p.move(3,4) print p.x p.set(5,6,7) print p.z Stone不支持方法重载。在同一个类中无法定义参数个数或类型不同的同名方法 9.2 实现类所需的语法规则 代码清单9

鹧鸪菜的Python学习笔记

↘锁芯ラ 提交于 2020-01-21 04:32:09
鹧鸪菜的Python学习笔记 变量: 用标识符命名的存储单元的地址称为变量,变量是用来存储数据的,通过标识符可以获取变量的值,也可以对变量进行赋值。对变量赋值的意思是将值赋给变量,赋值完成后,变量所指向的存储单元存储了被赋的值,在Pyhton语言中赋值操作符为“=、+=、-=、*=、/=、%=、**=、//=”。 变量声明 当程序使用变量存储数据时,必须要先声明变量 ,然后才能使用。声明变量的语法如下: identifier [ = value] ; 其中identifier是标识符,也是变量名称。value为变量的值,该项为可选项,可以在变量声明时给变量赋值,也可以不赋值。 声明变量时,不需要声明数据类型,Python会自动选择数据类型进行匹配 。identifier只能包含 字母、数字、下划线,可以下划线和字母开头,但是不能以数字开头,不能包含空格,也不要将python关键字和函数名作为变量名(这一点与C基本一致) 附: Python中的保留字 and exec not assert finally or break for pass class from print continue global raise def if return del import try elif in while else is with except lambda yield 变量的赋值 a

Java千问:学透Java自增(++)自减(--)运算符,看这一篇就够了!

删除回忆录丶 提交于 2020-01-19 13:28:17
同很多高级编程语言一样,Java语言的运算符系统当中也有自增(++)和自减(--)这两个运算符。很多小伙伴对这两个运算符都深感头疼,并且很多公司在面试的时候也经常会问到与之相关的问题,今天我们就通过一篇文章来深度解析一下这两个运算符,相信在看过这篇文章之后,你再也不会被自增(++)和自减(--)运算符难住。由于自增和自减运算符的原理完全相同,所以我们在讲解的时候仅以自增运算符举例。(预警:本文举例较多,篇幅较长,请耐心看完) 一、基本运算规则介绍 自增(++)和自减(--)运算符是对变量在原始值的基础上进行加1或减1的操作。它们都有前缀和后缀两种形式。前缀形式的运算规则可以概括为:”先自增(减),后引用”,而后缀形式的运算规则可以概括为:”先引用,后自增(减)”。这里所说的”引用”,指的是使用变量的值。另外,我们还要强调一个细节: 无论是前缀形式还是后缀形式,自增自减运算符的优先级要高于赋值运算符 。大家要记清楚这个细节,后文还会针对这个细节进行论述。下面我们就分为几种情况来研究++和--在不同场合下的运算效果。 二、语句中仅有++或-- 请看代码: 我们可以看到,这段代码中总共有3条语句,其中第2条语句中仅有一个后缀形式++操作,程序的输出结果是3。那么我们再来看另外一段代码: 这段代码与之前的那段代码基本一样,只是第2条语句中,后缀形式的++操作被换成了前缀形式

Python魔法方法(一)

风流意气都作罢 提交于 2020-01-19 04:43:06
构造方法 我们最为熟知的基本的魔法方法就是 __init__ ,我们可以用它来指明一个对象初始化的行为。然而,当我们调用 x = SomeClass() 的时候, __init__ 并不是第一个被调用的方法。事实上,第一个被调用的是 __new__ ,这个 方法才真正地创建了实例。当这个对象的生命周期结束的时候, __del__ 会被调用。让我们近一步理解这三个方法: __new__(cls,[…) __new__ 是对象实例化时第一个调用的方法,它只取下 cls 参数,并把其他参数传给 __init__ 。 __new__ 很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。我不打算深入讨论 __new__ ,因为它并不是很有用, Python文档 中 有详细的说明。 __init__(self,[…]) 类的初始化方法。它获取任何传给构造器的参数(比如我们调用 x = SomeClass(10, ‘foo’) , __init__ 就会接到参数 10 和 ‘foo’ 。 __init__ 在Python的类定义中用的最多。 __del__(self) __new__ 和 __init__ 是对象的构造器, __del__ 是对象的销毁器。它并非实现了语句 del x (因此该语句不等同于 x.__del__())

50道经典的java程序题

好久不见. 提交于 2020-01-18 00:06:35
JAVA基础编程练习50题 本文对50道经典的java程序题进行详细解说,对于初学者可以跳过一些逻辑性太强的题目,比如第一题用到了方法的递归,初学者可能不理解,最好先看那些有if、for、while可以简单解决的程序题!但是,对于比较深入学习过的同学,还是希望可以一口气就看完,这是比较全面思维锻炼! 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21…. 做这种题目,最好的做法就是找出规律,跟高中的数列一样 本题有:a[n]=a[n-1]+a[n-1],而第一第二项都知道了,后面的值也可以求得 public class Programme1 { public static void main(String[] args) { System.out.print("请输入你想知道的兔子数量的月份:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt();//获取输入的整数 System.out.println("第" + n + "个月兔子总数为" + fun(n)); scanner.close(); } /** *

verilog 心得

爱⌒轻易说出口 提交于 2020-01-17 04:28:17
verilog语法学习心得 1.数字电路基础知识: 布尔代数、门级电路的内部晶体管结构、组合逻辑电路分析与设计、触发器、时序逻辑电路分析与设计 2.数字系统的构成: 传感器 AD 数字处理器 DA 执行部件 3.程序通在硬件上的执行过程: C语言(经过编译)-->该处理器的机器语言(放入存储器)-->按时钟的节拍,逐条取出指令、分析指令、执行指令 4.DSP处理是个广泛概念,统指在数字系统中做的变换(DFT)、滤波、编码解码、加密解密、压缩解压等处理 5.数字处理器包括两部分:高速数据通道接口逻辑、高速算法电路逻辑 6.当前,IC产业包括IC制造和IC设计两部分,IC设计技术发展速度高于IC设计 7.FPGA设计的前续课程:数值分析、DSP、C语言、算法与数据结构、数字电路、HDL语言 计算机微体系结构 8.数字处理器处理性能的提高:软件算法的优化、微体系结构的优化 9.数字系统的实现方式: 编写C程序,然后用编译工具得到通用微处理器的机器指令代码,在通用微处理器上运行(如8051/ARM/PENTUIM) 专用DSP硬件处理器 用FPGA硬件逻辑实现算法,但性能不如ASIC 用ASIC实现,经费充足、大批量的情况下使用,因为投片成本高、周期长 10.FPGA设计方法: IP核重用、并行设计、层次化模块化设计、top-down思想 FPGA设计分工:前端逻辑设计、后端电路实现

js基础

放肆的年华 提交于 2020-01-17 01:48:00
文章目录 js基础第一天 1、js的作用 2、js概念和组成 2.1、js概念 2.2、js组成 3、js注意点 4、js中的5中输出语句(前期写js代码,每一句写完加;) 5、js中的变量 5.4.1、变量使用的几种形式,先声明 再使用 5.4.2、变量的命名的规则和规范: 5.4.2、交换变量的值:倒可乐(var temp = a; a=b; b=temp;) 6、js中的数据类型 6.1、js中的数据类型数字类型基本介绍:(控制台蓝色) 6.2、字符串类型:(控制台的颜色是黑色) 6.3、boolean类型(深蓝):true/false 6.4、(非正常值) undefined(灰色)(变量声明未赋值变量默认undefined)和null(在web api阶段,如果需要通过js获取页面中的元素,没有获取到,此时就是null(灰色)(空)) null是object类型(特殊情况) 6、字面量赋值与变量赋值: 7、运算符: js基础第二天 js基础第三天 js基础第四天 js基础第五天 js基础第六天 js基础第一天 1、js的作用 1、远古时期:表单校验 2、现代无所不能:前端、后端node.js、交互ajax、命令行工具开发(node.js)、桌面程序、app开发、游戏开发、物联网 2、js概念和组成 2.1、js概念 1、js是一种运行在浏览器端的脚本语言

python传参和赋值

℡╲_俬逩灬. 提交于 2020-01-16 16:46:50
python的赋值 Assignment statements are used to (re)bind names to values and to modify attributes or items of mutable objects ------官方文档 赋值语句用于(重新)将名称绑定到值,并修改可变对象的属性或项 python中一切皆对象,数字是对象,列表是对象,函数是对象 简单理解,python的变量可以看作一个简简单单的“标签”,除了变量名没有任何意义,直到它被一个有意义的实体(对象)所赋值,赋值的过程其实就是一个变量绑定对象的过程,可以看作是给对象贴了个标签(这个比喻相对严谨) 赋值过程 无论是可变类型(如list)的对象或是不可变类型(如int)的对象, 给变量赋值的过程都意味着绑定或重新绑定 绑定过程不是只有一次,绑定过对象的变量仍可以重新绑定其它对象(包括其它类型的对象),没有被变量绑定的对象将可能被垃圾回收 赋值int 绑定整数对象池中的一个整形对象 a = 1 b = a c = 1 d = 2 print("a",id(a)) print("b",id(b)) print("c",id(c)) print("d",id(d)) 1是一个对象,在整数对象池中是固定的(即一个特定的内存位置存储着1),如上一三两行实现了ac均绑定了整数对象1

sql之T-SQL

此生再无相见时 提交于 2020-01-16 16:17:38
下面就T-SQL的几个方面来分别讲解一下。 1、变量 要动态的写sql语句,就不能没有变量。 声明变量并赋值: 1 declare @i as int;--定义一个 int 类型的 变量 (as可以省略) 2 print @i;--这注意:没有赋值之前,程序不会报错,而且输出一个 空 3 set @i=3; 4 print @i; 在sql server 2008之后就可以对变量 在声明的同时进行赋值 1 declare @a int=3; 2 print @a; 在变量的使用过程中,一定要注意nvarcahr 和nchar的区别。 1 declare @s nvarchar(20); 2 set @s='Hello'; 3 set @s=@s+' World!'; 4 print @s;--输出的是 Hello World! 5 6 declare @s2 nchar(20); 7 set @s2='Hello'; 8 set @s2=@s2+' World!'; 9 print @s2;--输出的是 Hello。 为什么使用nchar却是输出的 Hello,因为:nchar是固定长度,即使长度没有达到最大,但是其余长度用 空来代替了,所以 相当于是满的,所以在进行字符串的相加 是不会起作用的。 在查询中赋值: 1 declare @now datetime; 2 select