实例变量

Kotlin 中的 null safety

落爺英雄遲暮 提交于 2019-11-27 18:18:19
在编程语言中空引用(Null Reference)一直是一个不太好的概念。空引用带来了一系列的麻烦,在 2016 年的 QCon 中 Tony Hoare 博士将空引用称作 十亿美元的错误 。 本次主要介绍一些常见的处理 null 的方式,特别是 kotlin 中的方案: null 带来的问题 常见的 null 处理方案 kotlin 中的方案 从历史上看,在编程语言中空引用(Null Reference)一直是一个不太好的概念。空引用最早在 1964 年由 Tony Hoare 博士 发明,随后的主流语言中都延续了空引用的使用,包括 C、C++、 Java、C# 等。空引用在编程中带来了一系列的麻烦,在 2016 年的 QCon 中 Tony Hoare 博士将空引用称作 十亿美元的错误(The Billion Dollar Mistake) 。 Null 带来的问题 破坏类型系统 静态检查的编程语言可以由编译器确保类型正确,不需要等到运行时实际执行代码。 例如在 Java 中当我们写下 x.toUpperCase() , 编译器会检查 x 的类型。如果 x 得类型是 String , 那么检查通过;如果是其他类型,比如 Servlet , 那么检查失败。 静态类型检查在编写大型的复杂软件时会提供强大的帮助。但是在 Java 中,由于任何引用都可以是 Null

Java内存管理机制

时间秒杀一切 提交于 2019-11-27 16:56:12
对于从事 C/C++ 程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的帝皇,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。 对于 Java 程序员来说,在虚拟机的自动内存管理机制的帮助下,不在需要为每一个 new 操作去写配对的 delete/free 代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过也正是因为 Java 程序员把内存控制权交给了 Java 虚拟机,一旦出现内存泄漏和溢出的问题,如果不了解虚拟机怎样使用内存的,那排查错误将会成为一项异常艰难的工作。 1. 什么是 JVM? JVM(Java 虚拟机)是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM 有自己的硬件架构,如处理器、堆栈、寄存器等,还有对应分指令系统。 假如一个程序使用的内存区域是一个货架,那 JVM 就相当于是一个淘宝店铺,它不是真实存在的货架,但它和真实货架一样可以上架和下架商品,而且上架的商品数量也是有限的。 假如货架是在深圳,那 JVM 的平台无关性就相当于是客人可以在各个地方购买你在淘宝上发布的商品,不是只有在深圳才能购买货架上的商品。 2. 什么是 Java 内存模型? Java

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

天大地大妈咪最大 提交于 2019-11-27 16:47:43
静态变量用static修饰,实例变量不用。 public class Person { static String position; String name; } 静态变量是随着类的字节码的加载而被加载进内存的,所以只要程序一启动运行到该类时就会被加载进内存,不管创建了多少个对象在内存中只存储一份。而实例变量是在创建对象以后才能被分配内存空间,创建对少个对象就会存储多少份。 静态变量被存储到内存的静态区,实例变量被存储到堆中。 静态变量是和类相关的,使用类名直接调用。实例变量是和对象相关的必须通过对象名调用。 public static void main(String[] args) { Person.position = "老师"; Person p = new Person(); p.name="老王" } 来源: https://blog.51cto.com/11583017/2430453

JVM基本指令及其说明

时光毁灭记忆、已成空白 提交于 2019-11-27 16:21:05
本文分为3个部分, 第一个部分列出常用的jvm指令 ,每一个指令基本都有几个类似的指令,看名字就知道了,比如像iconst、lconst、fconst、dconst这些主要是针对不同的类型(int、long、float、double),将对应类型的值push到栈顶,其他指令类似,所以基本指令就给出一个例子,其他的联想一个就好, 第二部分,给出一小段代码, 并给出指令集并详细给出每一行代码的解释。 第三部给出jvm全部的指令集, 方便查询 jvm 基本指令 iconst_1 int型常量值1进栈 bipush 将一个byte型常量值推送至栈顶 iload_1 第二个int型局部变量进栈 ,从 0 开始计数 istore_1 将栈顶int型数值存入第二个局部变量,从 0 开始计数 iadd 栈顶两int型数值相加,并且结果进栈 return 当前方法返回void getstatic 获取指定类的静态域,并将其值压入栈顶 putstatic 为指定的类的静态域赋值 invokevirtual 调用实例方法 invokespecial 调用超类构造方法、实例初始化方法、私有方法 invokestatic 调用静态方法 invokeinterface 调用接口方法 new 创建一个对象,并且其引用进栈 newarray 创建一个基本类型数组,并且其引用进栈 二、具体分析

Python 运算符Ⅳ

不想你离开。 提交于 2019-11-27 15:54:59
Python比较运算符 以下假设变量a为10,变量b为20: 以下实例演示了Python所有http://www.xuanhe.net/比较运算符的操作: 以上实例输出结果: Python赋值运算符 以下假设变量a为10,变量b为20: 以下实例演示了Python所有赋值运算符的操作: 以上实例输出结果: 来源: https://www.cnblogs.com/danjiu/p/11369276.html

201871010131张兴盼《面向程序设计(java)》第四周学习总结

我的梦境 提交于 2019-11-27 14:16:57
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11552848.html 作业学习目标 掌握类与对象的基础概念,理解类与对象的关系; 掌握对象与对象变量的关系; 掌握预定义类 Date 、 LocalDate 类的常用 API ; 掌握用户自定义类的语法规则,包括实例域、静态域、构造器方法、更改器方法、访问器方法、静态方法、 main 方法、方法参数的定义要求;(重点、难点) 掌握对象的构造方法、定义方法及使用要求;(重点); 理解重载概念及用法; 掌握包的概念及用法; 第一部分:总结第四章理论知识 1 、面向对象程序设计概述:面向对象程序设计( OOP )是一种新的程序设计思维,这种方法更接近人类处理现实世界问题的自然表示方法。   ( 1 )对象是面向对象编程的核心,是具体实体,具有明确定义的状态和行为。   ( 2) 对象的三个主要特征:      1 )行为 : 可以对对象施加哪些操作或者可以使用哪些方法;      2 )状态:当施加那些操作或者方法时,对象应该如何应对;      3 )标识 : 如何辨别具有相同行为和状态的不同对象。    2 、类( class )   ( 1

unity内存管理(转)

℡╲_俬逩灬. 提交于 2019-11-27 12:54:44
转自: https://www.cnblogs.com/zsb517/p/5724908.html Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的。 其实场景里所有静态的对象也有这么一个加载过程,只是Unity3D后台替你自动完成了。 详细说一下细节概念: AssetBundle运行时加载: 来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法 也可以来自Memory,用CreateFromMemory(byte[]),这个byte[]可以来自文件读取的缓冲,www的下载或者其他可能的方式。 其实WWW的assetBundle就是内部数据读取完后自动创建了一个assetBundle而已 Create完以后,等于把硬盘或者网络的一个文件读到内存一个区域,这时候只是个AssetBundle内存镜像数据块,还没有Assets的概念。 Assets加载: 用AssetBundle.Load(同Resources.Load)

Java 方法

烂漫一生 提交于 2019-11-27 12:04:16
在前面几个章节中我们经常使用到 System.out.println() ,那么它是什么呢? println() 是一个方法。 System 是系统类。 out 是标准输出对象。 这句话的用法是调用系统类 System 中的标准输出对象 out 中的方法 println()。 那么什么是方法呢? Java方法是语句的集合,它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 方法的优点 1. 使程序变得更简短而清晰。 2. 有利于程序维护。 3. 可以提高程序开发的效率。 4. 提高了代码的重用性。 方法的命名规则 1.方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如: addPerson 。 2.下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是: test<MethodUnderTest>_<state> ,例如 testPop_emptyStack 。 方法的定义 一般情况下,定义一个方法包含以下语法: 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; } 方法包含一个方法头和一个方法体。下面是一个方法的所有部分: 修饰符: 修饰符,这是可选的,告诉编译器如何调用该方法

Java8新特性

旧巷老猫 提交于 2019-11-27 12:00:49
1.接口 1)增加default方法和static方法,这两种方法都可以有方法体 interface Interface1 { static void st1() {System.out.println("static Interface1.st1()");} default void df1() {System.out.println("default Interface1.df1()");} } 2)default方法属于实例(对象访问),static方法属于类(接口,只可以通过接口名访问) interface Interface1 { static void st1() {System.out.println("static Interface1.st1()");} default void df1() {System.out.println("default Interface1.df1()");} } public class Jdk8Test { public static void main(String[] args) { //static方法属于类,接口名访问 Interface1.st1(); //报错:default方法不可以通过接口名访问 //Cannot make a static reference to the non-static method

mysql存储过程简单实例 变量赋值 游标遍历

萝らか妹 提交于 2019-11-27 11:26:57
应用场景: 有两张表,学生表和对应的各科成绩表。 学生表student 字段: id int , name varchar(20) 数值: 1 A 2 B 成绩表score 字段: id int studentid int subjectid int score int 数值: 1 1 1 80 2 1 2 90 3 1 3 100 4 2 1 60 5 2 2 70 用存储过程来通过名字获取对应学生的成绩最大值的科目名称。本例的逻辑比较简单,用一句sql就可以实现,这里只是演示存储过程的基本语法。 创建存储过程: delimiter // create procedure getMaxScore(IN `xname` varchar(20)) begin declare max_score INT default 0; declare cur_score INT; declare b int default 0; DECLARE cur_1 CURSOR FOR select score from score where studentid=(select studentid from student where name = xname); DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1; OPEN cur_1; FETCH