那些把自己陷进去的误区

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. linux sort,uniq,cut,wc命令详解

    linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...

  2. 4..一起来学hibernate之Session详解

    后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续... 后续...

  3. switch...case和if...else if的判断应用

    判断成绩所属等级的 两种方法 1...      switch...case方法: #include<stdio.h> int main(void) { ;i <= ;++i) // ...

  4. linux OS install oracle database

    #!/bin/bash#Purpose:Create and config oracle install.#Usage:Log on as the superuser('root') #1.creat ...

  5. C#更改文件访问权限所有者(适用于各个Windows版本)

    前面也提到了,前段时间在做Online Judge系统,在正式上线前有几个比较老的版本,其中第一个版本使用ACL来控制权限以确保安全(但是这个版本完全建立在IIS上,所以这样做是没效果的),遇到了一些 ...

  6. 在ABP中通过EF直接执行原生Sql的解决方案

    一般情况下,使用EF中的查询语法和方法语法可以帮助我们完成绝大部分业务,但是也有特殊的情况需要直接执行Sql语句.比如,我们的业务过于复杂繁琐,或是有些业务使用EF操作时比较复杂,但是使用Sql时会很 ...

  7. Backbone源码解析(一):Event模块

    Backbone是一个当下比较流行的MVC框架.它主要分为以下几个模块: Events, View, Model, Collection, History, Router等几大模块.它强制依赖unde ...

  8. windows 8.1 试用感受:蛋疼感大幅降低

    众所周知windows 8 的最大使用感受就是蛋疼. 无论是微软MVP,还是我这样的万年不悔微软小白鼠,普通用户,小白用户,或多或少的都对这款操作系统感到蛋疼. 槽点太多,以至于大家都懒得批判了.好在 ...

  9. nginx负载下站点错误响应会导致其他节点重复响应问题的解决过程

    目录 前言 问题来了 问题又来了 问题分析 困惑 转机 后续 前言: 这是我上周工作过程中的一次解决问题的过程.解决的是nginx负载下站点错误响应导致其他节点重复响应. 我在整理这个记叙文时,在给这 ...

  10. 缓存篇(Cache)~第一回 使用static静态成员实现服务器端缓存(导航面包屑)

    返回目录 今天写缓存篇的第一篇文章,在写完目录后,得到了一些朋友的关注,这给我之后的写作带来了无穷的力量,在这里,感谢那几位伙伴,哈哈! 书归正传,今天我带来一个Static静态成员的缓存,其实它也不 ...