那些把自己陷进去的误区

1.1数据类型

   1.整型:

    1.在Java中,整形的范围为-2147 483 648—2147483647,并且这个范围与运行Java代码的机器无关,此举大大解决了移植问题。

    2.Java没有任何无符合的数据类型的(unsigned),整型允许是负数。

   2.浮点类型:

    1.float类型的数值后面一定有一个后缀F,没有后缀默认为double类型

    2.NaN不是一个数字,它表示数值计算出错的值。

      如:计算0/0或者负数的平方根结果为NaN。

NaN是无法参与数值运算的。

   

    3.浮点数值不适用于禁止出现舍入误差的金融计算中。

 

   例如:2.2-1.1 结果将打印出 0.899999999999 而不是0.9.主要原因是浮点数值采用2进制系统表示,而在二进制中无法精确的表示分数1/10.

 这就好像十进制无法精确的表示1/3一样。

   我们可以使用数值计算最为精确的 BigDecimal 类进行小数计算。

  • 3.布尔类型:

    1.整形值和布尔值不能进行相互转换。  

  在C++ 中,数值或指针可以代替Boolean值:false 和 true。值0相当于false,非0相当于true. 

  4.关于类型转换

  1.在Java中,允许我们把任何基本数据类型转换成别的基本数据类型。但是布尔型除外,后者根本不允许进行任何类型的转换处理

  2.如果对基本数据类型执行算术运算或者位运算,小于int类型的的值会自动转换为int。这样以来,最终结果就是int。但是把结果赋值给较小的类型,则必须进行类型转换

  

1.2变量

  1.变量的命名

    1.变量名必须是一个字母开头的由数字或者字母组成的序列。

    2.字母组成包括大小写字母,‘_’,‘$’和在某种语言中代表字母的任何Unicode字符。但是不要在自己的代码中使用$。

    3.变量的名的长度是没有限制的。

  2.变量的初始化

    1.声明一个变量后必须对其进行显示初始化,不能使用未被初始化的变量。

    int a=100; //这两张方式都是可以的。
    int a;a=100;

    2.静态变量(static)属于类,不属于任何对象。

  3.常量

    1.在Java中关键字final指示常量,final double PAI=3.141。

  说明:    

    const是Java的保留关键字,但目前没有使用,所以只能使用fianl.

    2.常量只能被赋值一次,一但被赋值就再也无法改变了。

    3.final 经常与 static 一起使用,可以让这个常量成为类常量,一般定义位于main方法的外部,该类的所有方法都可以使用。

1.3对象与类

  1.方法调用中的参数传递

    记住一句话,Java中的所有传递都是值传递。但是此值意义不是我们想的数值!

    我们来看一段代码:

    

    我刚开始有一个疑惑,为什么s添加的到哦纳西,会传到Test对象中的name中呢?

    

    我之所以称为值传递,是因为我们传递的就是变量本身,也即是对象的地址

 说明:

    1.基本变量的参数直接传递值。

    2.对象或数组等引用类型的参数——传递实参变量的值一个指向对象或数组的引用,传递过后形参和实参均指向同一个对象或数组

  

  • = 是赋值操作(任何包含=的如+=、-=、 /=等等,都内含了赋值操作)。不再是你以前理解的数学含义了,而+ - * /和 = 在java中更不是一个级别,换句话说, = 是一个动作,一个可以改变内存状态的操作,一个可以改变变量的符号,而+ - * /却不会。这里的赋值操作其实是包含了两个意思:1、放弃了原有的值或引用;2、得到了 = 右侧变量的值或引用。Java中对 = 的理解很重要啊!!可惜好多人忽略了,或者理解了却没深思过。
  • 对于基本数据类型变量,= 操作是完整地复制了变量的值。换句话说,“=之后,你我已无关联”;至于基本数据类型,就不在这科普了。
  • 对于非基本数据类型变量,= 操作是复制了变量的引用。换句话说,“嘿,= 左侧的变量,你丫别给我瞎动!咱俩现在是一根绳上的蚂蚱,除非你再被 = 一次放弃现有的引用!!上面说了 = 是一个动作,所以我把 = 当作动词用啦!!”。而非基本数据类型变量你基本上可以
  • 参数本身是变量,参数传递本质就是一种 = 操作参数是变量,所有我们对变量的操作、变量能有的行为,参数都有。所以把C语言里参数是传值啊、传指针啊的那套理论全忘掉,参数传递就是 = 操作

作者:Jack Tan
链接:https://www.zhihu.com/question/31203609/answer/51473602
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

  

  2.可变长参数

 说明:

    样式:int....a

    Java可将可变长参数当做数组对待,其次可变长参数只能作为方法参数列表中最后一个参数

  

  3.对象实例化步骤

 步骤:  

    为对象分配存储空间,并用默认值对成员变量初始化

       执行显式初始化,即执行成员变量声明时的赋值

    执行构造方法的主体,完成对象初始化

    返回该对象的引用

  

  4.对象清理

    1.垃圾收集机制(garbage collection):当Java运行环境确定某个对象不再被使用时,将其删除.

    2.一个对象在没有应用指向它时,会作为垃圾收集

    3.垃圾收集器会周期性释放不用的对象占据的空间

    4.关于finalize方法

说明:

  某些对象使用了内存之外的其他资源,例如,文件或使用系统资源的另一个对象句柄,在这种情况下,当资源不再需要时,可在类中添加finalize()

  finalize在垃圾回收器之前调用。      

  

  5.向上转型

    将子类对象的引用转换成父类对象的引用,称为向上转型(Upcasting),就是说父类引用可以指向子类对象

 说明:

    如:Employee e=new Manager();

    通过该变量(如e)只能访问父类(Emplyee)的方法,子类(Manager)特有的部分被隐藏

  

  6.向下转型

    1.父类对象不能直接按子类引用,必须进行强制类型转换才能作为子类的引用处理。

    2.如何保证向下转型的正确性:

      a.先测试以确定子类类型,再执行转换: if (supVar instanceof SomeSubClass) (someSubClass) supVar;

      b.对强制转换结果进行运行时类型识别,若结果类型与子类类型不符,则抛出ClassCastException

  

  7.静态域和静态方法

     1.在类的成员变量声明static,这样的变量属于静态变量,存放在HEAP中。它属于类而不属于任何独立的对象。

 HEAP堆:  

    Heap的空间是手动申请和释放的,heap常用new关键字来分配,heap空间是很大的自由区

 STACK栈:

    STAKC的空间是由操作系统自动释放和分配的,stack空间有限

 说明:

    在Java中,若只是声明一个对象,则现在栈内存中为其分配地址空间,若再new一下,实例话它,则在堆内存中为其分配地址。

     2.静态变量只在 系统加载其所在类时 分配空间并初始化,且在创建该类的实例对象中不再分配空间。

     3.静态方法不能直接调用实例方法,因为静态方法和实例方法的初始化顺序不一样,在静态方法中调用实例方法会出错。

 Main方法:

  声明必须也只能为: public static void main(String args[])

 原因:

    这么定义是与JVM有关系的,当一个类中有main()方法,执行命令“Java 类名”则会启动虚拟机并执行该类中的main方法。

  由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要限制为

  public static。对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。

    4.关于重写:父类静态——Y——子类静态;父类非静态——X——子类静态;父类静态——X——子类非静态;

    5.静态初始化代码块:对静态变量进行初始化。

说明:

  类定义中不属于任何方法体且以static关键字修饰的语句块 static {…}

  在加载该类时执行且只执行一次

  如果类中定义了多个静态语句块,则这些语句块按照在类中出现的次序运行

1.4 关于接口

  1.接口:

    1.在Java中切记接口和类是不一样的,接口是一种特殊的类,这种说法是完全错误的,接口是对类的一种描述,类要遵循接口描述的统一格式进行定义。

    2.接口中的方法自动属于public,因此在接口中声明方法时,不必提供关键字public。

    3.接口中绝对不能含有实例域,也不能在接口中实现方法。

    4.每个类中只能有一个父类,但是可以实现多个接口,这就为定义类的行为提供了极大的灵活性。

  2.接口常量:

    1.由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量。因而interface通常是存放常量的最佳地点.

    2.任何实现了接口的类,都会自动继承这些常量,并且可以在方法中直接地引用,比较方便。


1.5

下面内容还在整理 ing...

1.3运算符

  位运算符

    1.&与|运算符应用于布尔值,得到的结果也是布尔值。但是不按照短路方式进行。

假&&假  短路方式

假&假      

Java:那些把自己陷进去的误区(一)的更多相关文章

  1. java 8 stream reduce详解和误区

    目录 简介 reduce详解 总结 java 8 stream reduce详解和误区 简介 Stream API提供了一些预定义的reduce操作,比如count(), max(), min(), ...

  2. MPC控制初长成——我陷过的误区

    真正接触控制一个多月,现记录自己的误区,以警示自己: 1 . 离散与连续 我经常会拿到连续的系统,用离散的方式去控制,然后反复找原因,还是找不到.要记住:离散和连续要分开!!!,网上的例子大都是连续的 ...

  3. 161124、Java 异常处理的误区和经验总结

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验, ...

  4. Java异常处理的误区和经验总结

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验, ...

  5. Java 异常处理的误区和经验总结--转载

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验, ...

  6. Java 异常处理的误区和经验总结

    Java 异常处理的误区和经验总结   1 本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳.只有处理好了异常,才能提升开发人员 ...

  7. GIS制图人员的自我修养(1)--制图误区

    GIS制图人员的自我修养 by 李远祥 最近一直坚持写GIS制图的技术专题,并不是为了要介绍有什么好的技术和方法去制图,而是要告诉所有从事这一方向的人员一个铁铮铮的实现--要做好GIS制图,必须加强自 ...

  8. 我Java学习时的模样(三)

    读Java源码 平常使用Java的时候,那些集合类使用起来很顺手,但是有没有想过这些集合内部的实现原理是怎样的,它的添加移除都有哪些操作? 有了一些工作经验之后,必须要读一读Java包中的源码,需要知 ...

  9. Java实例学习——企业进销存管理系统(3)

    Java实例学习--企业进销存管理系统(3) (本实例为书上实例,我所记录的是我的学习过程) 开始时间:2月12日 完成时间:暂未完成 2月16日-公共类(Item公共类,数据模型公共类,Dao公共类 ...

随机推荐

  1. TestNG教程

    TestNG教程 http://www.yiibai.com/testng/2013/0916311.html TestNG,3种执行方式: 1.ant(build.xml) 2.Eclipse(安装 ...

  2. 从网络上下载文件到sd卡上

    String SDPATH = Environment.getExternalStorageDirectory() + "/"; String path = SDPATH + &q ...

  3. PHP中关于位运算符 与 或 异或 取反

    <?php /** * author:LMS * createTime:2015/07/22 * desctiption:位运算[ & | ^ ~ ] * 与&:如果a.b两个值 ...

  4. Online Judge中基本的输入输出

    一.利用c语言处理输入和输出 1.输入: 在C语言中输入中stdin指针表示标准的输入,scanf默认读取的就是stdin指向的输入,在acm中我们可能需要不断的测试,最好将stdin重定向到某一个文 ...

  5. UILabel实现自适应高宽

    UILabel是iOS开发常用的控件.UILabel的属性需要了解,UILabel的特殊显示效果也需要我们掌握.UILabel自适应高宽度是很多初学者遇到的技术性难题.比如段文字,要让他完全地分行显示 ...

  6. Java学习笔记:控制反转

    控制反转(Ioc)模式(又称DI:Dependency Injection)就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在 ...

  7. windows下与linux下安装redis及redis扩展

    1.        Redis的介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起 ...

  8. Lucene 查询工具 LQT

    Lucene Query Tool (lqt) 是一个命令行工具用来执行 Lucene 查询并对结果进行格式化输出. 使用方法: 01 $ ./lqt 02 usage: LuceneQueryToo ...

  9. MQTT协议简记

    MQTT - MQ Telemetry Transport   轻量级的 machine-to-machine 通信协议. publish/subscribe模式. 基于TCP/IP. 支持QoS. ...

  10. Windbg用法详解

    工作空间 WinDBG的工作空间中保存了以下几种信息 调试会话状态: 包括断点,打开的源文件,用户定义的别名(alias)等. 调试器设置:包括符号文件路径,可执行映像文件路径,源文件路径,用I+/I ...