变量

Java基础-接口与多态

ε祈祈猫儿з 提交于 2020-02-23 09:23:41
一、接口 1.1 接口的概念 接口是功能的集合,同样可看做是一种数据类型。 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。 请记住:一切事物均有功能,即一切事物均有接口。 1.2 接口的定义 与定义类的class不同接口定义时需要使用interface关键字。定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。 定义格式: public interface 接口名 { 抽象方法1; 抽象方法2; 抽象方法3; } 注意: (1)接口中的方法均为公共访问的抽象方法 (2)接口中无法定义普通的成员变量,必须定义为常量。 public static final 数据类型 变量名 = 值; 1.3 类实现接口 类与接口的关系为实现关系,类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements。 其他类(实现类)实现接口后,就相当于声明:”我应该具备这个接口中的功能”。实现类仍然需要重写方法以实现具体的功能。 格式如下: class 类 implements 接口 { 重写接口中方法 } 在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写该抽象方法

朗沃20140424

守給你的承諾、 提交于 2020-02-23 05:37:55
今天学习了Java基础,对Java有了基本的了解。java基础包括了java中变量,数据类型和常量是怎样定义,每个部分由那些组成等。现在来说哈变量,java中变量分为基本类型和引用类型,现在就说哈基本类型吧;基本类型分为整型,浮点型,字符型和布尔型。其中整型又有四种类型:int long short 和byte。这四种每种分配的内存不一样,其中int4个字节,byte1个字节,short2个字节,long8个字节。浮点型也分为double型和float型,double型是8个字节,float型是4个字节。因为他们每种类型的内存空间不一样所以相互转换是有原则的,比如说大内存向小内存的转换,就需要强制转换,例如 int a与 float b 要b向a转换 为 a=(int)b。这就是强制转换的一般模式。当小内存的向大内存的转换就不需要强制了,它们则是自动转换。这个是我们在转换的过程中需要注意的!定义float型变量需要注意要在定义的变量后面加上强制转换符f,浮点数默认的是double型的,不加上强制转换符话就会定义成double型了,比如float a=1.25;这就不是正确的定义方式,1.25默认的是double型的,正确的方式为float a=1.25f;,所以在定义这类变量的时候要注意这些细节问题!!! 来源: https://www.cnblogs.com/lijilin/p

c#基础之数据类型

大兔子大兔子 提交于 2020-02-23 05:14:54
(一)字符串 (1)字符串类型是不可变的,是引用类性。如果有大量字符串需要修改,可以用StringBuilder,它包含了Append(),AppendFormat(),Insert(),Remove(),Replace()等方法。两者的区别在于 这些方法会修改StringBuilder本身中的数据,而不是简单的返回一个新字符串。 (2)null表示将变量设置成无,且只能赋给引用类性,表示这个变量无任何值,不同于"",它表示为空字符串。 (3)隐式类性的局部变量var。但是在数据类型已知的情况下最好不要用。 (二)类性的分类 主要分为值类型和引用类性,区别在于值类型的数据总是进行值复制,引用类型的数据总是进行引用复制。 (2.1)值类型中,变量引用的位置就是值在内存中实际存储的位置。因此,将第一个变量的值赋给第二个变量会在新变量的位置创建原始变量的值的一个内存副本。 (2.2)引用类性的值存储的是对数据存储位置的引用。所以运行程序时,要先从变量中读取内存的位置,再"跳转"到包含数据的内存位置。引用类性指向的内存区域称之为堆(heap)。 引用类型不像值类型那样要求创建数据的内存副本,所以复制引用类性的实例比复制大的值类型实例更高效。 (三)数据类型之间的转换 有可能造成大变小或者引发异常的任何转换都需要执行显示转换,相反属于隐式转型。 (3.1)显式转换

关于const的几种用法

江枫思渺然 提交于 2020-02-23 04:59:28
const用来修饰的变量时,变量为只读变量其值不能改变,除了修饰普通变量,还可以修饰指针变量,函数形参。另外,修饰一个变量时, const int i 和 int const i 是等效的。即const修饰符和变量类型关键词顺序可以互换。 1.const修饰指针时。 int a = 9 ; int * const p0 = & a ; int const * p1 = & a ; const int * p2 = & a ; p0 ++ ; //错误,p0是常量,值不能改变 ( * p0 ) ++ ; //正确,*p值可以改变 p1 ++ ; //正确,p1值可以改变 ( * p1 ) ++ ; //错误,(*p1)是常量,值不能改变 p2 ++ ; //正确,p2值可以改变 ( * p1 ) ++ ; //错误,(*p2)是常量,值不能改变 2.修饰函数形参时,形参的值在函数内不能被改变。 void fun ( const int tmp ) { tmp ++ ; //错误,tmp前有const修饰,其值不能改变 printf ( "tmp=%d" , tmp ) ; } void fun ( int tmp ) { tmp ++ ; //正确,tmp前无const修饰,其值可改变。 printf ( "tmp=%d" , tmp ) ; } 来源: CSDN 作者:

Java并发编程基础概念

拟墨画扇 提交于 2020-02-23 04:14:08
Java并发编程基础概念 线程安全性 1、什么是线程安全性? 当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变量的访问。 如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误,这也就是所谓的线程不安全。 怎么解决这些不安全的问题呢? 不在线程之间共享该状态变量 将状态变量修改为不可变的变量 在访问状态变量时没有使用同步 当多个线程对同一共享变量进行操作时就有可能导致线程安全问题,那什么又是线程安全性呢? 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 2、竞态条件 如果多个线程对同一个数据进行“读取—修改—写入”的操作序列的话,如果对这个共享变量的操作没有进行同步的话,在多次调用中可能会导致严重的数据完整性问题。 在这里引出竞态条件的定义: 由于不恰当的执行时序而出现不正确的结果,这种情况被称为竞态条件。 竞态条件 很容易会与 数据竞争 相混淆,下面给出数据竞争的定义。 数据竞争是指,如果在访问共享的非final类型的域时没有采取同步来进行协同,那么就会出现数据竞争。 当某个计算的正确性取决于多个线程交替执行时序时,那么就会发生竞态条件。竞态条件又有哪些类型呢? 先检查后执行

Java代码常见优化方案

吃可爱长大的小学妹 提交于 2020-02-23 03:42:30
Java代码常见优化方案 首先,良好的编码规范非常重要。在 java 程序中,访问速度、资源紧张等问题的大部分原因,都是代码不规范造成的。 单例的使用场景 单例模式对于减少资源占用、提高访问速度等方面有很多好处,但并不是所有场景都适用于单例。 简单来说,单例主要适用于以下三个方面: 多线程场景,通过线程同步来控制资源的并发访问。 多线程场景,控制数据共享,让多个不相关的进程或线程之间实现通信(通过访问同一资源来控制)。 控制实例的产生,单例只实例化一次,以达到节约资源的目的; 不可随意使用静态变量 当某个对象被定义为 static 变量,那么 GC 通常是不会回收这个对象所占有的内存。 示例如下: public class A { private static B b = new B(); } 此时静态变量 b 的生命周期与 A 类同步,即如果 A 类不卸载,b 对象会常驻内存,直到程序终止。 创建 Java 对象使用注意事项 根据业务使用场景,尽量避免在循环中 new 对象。 这是因为系统要花费时间来创建对象,而且还要花时间对这些对象进行管理和垃圾回收。所以在可以控制的范围内,尽量保证最大限度地重用对象,最好能用基本的数据类型或数组来替代对象。 final 修饰符使用注意事项 final 修饰符的类是不可派生的,即不可被继承。在 java 核心代码中,有很多 被 final

JS闭包原理分析

我怕爱的太早我们不能终老 提交于 2020-02-23 03:29:34
JS闭包原理分析 闭包是指有权访问另一个函数作用域中的变量的函数。在一个函数A内部返回另一个函数B,并且函数B里面使用者A函数内部的私有变量,此外在函数A外面定义一个变量接收函数B,这样就形成了闭包。 比如在一栋房子里面有很多个小房间,你手上通过拿着一个小房间的地址(xxx栋001房),那么通过小房间的地址就可以找到这栋房子,进入里面。 函数都有自己的执行环境,该环境定义了变量或者函数访问数据的权限。JS 在运行的时候,会为每一个执行函数分配内存空间,我们称这个空间为作用域对象(Scope Object)。当调用函数时,函数中分配的本地变量会被存储在这个作用域对象中。当函数执行了之后,该空间会被销毁,该空间内的变量也会被销毁。 函数作用域对象是按顺序访问的,最先能够访问的是当前函数的作用域,如果访问的变量在当前作用域没有,会访问上一层作用域,直到找到全局作用域(Global)对象。如果访问到全局作用域也没有这个对象,会抛出ReferenceError的异常。这就是所谓的作用域链(scope chian)。 闭包之所以能够访问到上一层函数中的局部变量,是因为当变量被捕获之后,即使上一层函数调用完毕出栈了,但是它的作用域对象没有被销毁,所以仍然能够被闭包访问。 在函数内部返回一个函数,并且在外部定义一个全局变量接收这个返回的函数,该变量存储的实际上是返回的函数的存储地址

Java基础面试题:第一天积累

自古美人都是妖i 提交于 2020-02-23 03:19:42
1、 一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 2、 Java有没有goto? goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字) 3、 &和&&的区别? ①&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 ②&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“ ”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 &

变量

走远了吗. 提交于 2020-02-23 02:10:04
1.变量就是放数据的地方 变量定义的一般形式: <变量类型名称><变量名称>; 一行里可以定义多个变量 如:int price; int amount; int price,amount; 变量的名字有一个专业术语叫标识符, 标识符有自己的规则:只能由字母、数字和下划线组成,数字不能开头,C语言中的关键字(有的地方叫保留字)不可以用做标识符 2.C语言是一种有类型的语言,数据类型表示在变量中可以存放什么样的数据,变量中只能存放指定类型的数据 程序运行过程中不能改变变量的类型 int main ( ) { //算找零 int price = 0 ; /*这句话叫赋值,把右边的值0赋给左边的变量price,类型是int,初始值是0 因为这是在定义变量时做的赋值,所以这个赋值式子又叫做变量的初始化 关注:=,这个赋值符号,表示一个动作 a=b,在数学中表示一种关系,即a的值与b的值相等,关系是静态的,a=b和b=a是等价的 而在程序设计中,表示一个动作,a=b和b=a两者意思完全相反 C语言没有要求所有的变量都在定义的地方做初始化,但是所有的变量在第一次被使用(出现在赋值运算符的右边)之前应该被赋值一次 变量未初始化就使用,此时使用的值是该变量所在地址的值,有什么用什么,因此不初始化很难得到想要的答案 变量初始化的格式:<变量类型名称><变量名称>=<初始值>; 如:int price

ECMAScript 6基础

為{幸葍}努か 提交于 2020-02-23 00:32:49
ECMAScript 和 JavaScript 是什么关系?   1996 年 11 月,JavaScript 的创造者 Netscape 公司,希望JavaScript能够成为国际标准,将其提交给标准化组织 ECMA。次年,ECMA 发布了ECMAScript 1.0 版。不叫 JavaScript的原因:一是商标,JavaScript 已被 Netscape 公司注册为商标;二是体现其制定者是 ECMA,不是 Netscape,有利于保证其的开放性和中立性。    let 和 const 命令 let声明变量   块状作用域(任意大括号包含的变量都只在大括号里起作用,超出则报错) {let a=20;} console.log(a);//报错 //使用var var a = []; for (var i = 0; i < 5; i++) { a[i] = function () { console.log(i); }; } a[3](); // 结果为5 //使用let var a = []; for (let i = 0; i < 5; i++) { a[i] = function () { console.log(i); }; } a[3](); // 结果为3   不能重复声明 let a=20; let a=10; console.log(a);//报错