蓝鸥旗下品牌: 鸥课学院
全国咨询电话:13152008057
西安
您的位置: 首页 > 最新资讯 > 最适合初学者实践的10个Java编程技巧

最适合初学者实践的10个Java编程技巧

2017-09-11 蓝鸥
1453人 浏览:

有名人曰“世上本没有路,走的人多了也变成了路”。世上任何事物都是如此,后人都是踩在前人的足迹上前进。Java这门编程语言传入中国已有23年,经过无数的前辈总结和实践,有许多实用的Java编程技巧流传下来,让后辈的程序员们受益匪浅,下面蓝鸥西安java培训机构就来介绍一下,最适合初学者实践的10个Java编程技巧:

  1.return 一个空的集合,而不是 null

  如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素。这样你就不用去写一大堆 ”if else” 判断null元素。

  Java 的标准库设计者已经在 Collections 类中放了一个空的 List 常量 EMPTY_LIST,除此之外,还有 EMPTY_MAP, EMPTY_SET,真是贴心。

  2. 小心使用 String

  因为字符串相加或者拼接的方式都会在对象池中查找字符串是否存在,如果不存在则创建,这样在拼接的过程中会产生大量中间过程的字符串,占用内存资源。StringBuilder效率优于StringBuffer,但是StringBuffer线程安全。

  另外,在实例化一个字符串对象,构造函数应该避免发生直接实例化。

  3. 避免不必要的对象

  一个最昂贵的操作(在内存利用率)是java对象的创建。因此,建议只在必要时创建或初始化对象。

  4.Array 和ArrayList 选择

  4.1 ArrayList和Array是我们在实际编程中经常使用的容器,而且因为ArrayList相当于动态化的数组,所以它们之间有太多的相似,以至于我们在选择哪种来存储元素的时候,会有小小的迷惑,他们都有注解的优缺点,选择真的取决于你的真实场景。Array 有固定大小但 ArrayList 的大小不同。由于Array 的大小是固定的,在Array 类型变量声明的时候,内存被分配。因此,Array 是非常快的。另一方面, 使用ArrayList的最大缺点就是当我们添加新的元素的时候,它是先检查内部数组的容量是否足够,如果不够,它会创建一个容量为原来数组两倍的新数组,后将所有元素复制到新数组里,接着抛掉旧数组。这点真的很麻烦,因为每次都要这么搞,尤其是元素足够多的时候,这就真的是既影响内存又影响效率的问题,但通过单独测试它们的运行时间,发现其实差不多,最大的影响就是如果是有其他代码也需要使用到内存,那么Array依然不变,但是ArrayList就会变得慢多,相同情况下所花的时间是Array的四倍多(实际情况是远远不止)。

  4.2.添加或删除元素从ArrayList 比Array更容易。

  4.3.数组可以多维但ArrayList只有一个维度。

  4.4.ArrayList因为内部是一个数组,所以它是可以转化为数组的。

  4.5 两者的适用场合:

  List list = new ArrayList();

  虽然我们想要的确实是ArrayList而不是list,但是我们知道,父类是可以获得子类的引用并且使用子类的方法,所以这样我们就能同时使用List和ArrayList的方法而不用害怕出错了。

  首先,一个重要的约束就是,List的声明区域一般是在main方法里(当然静态list也可以,但是我们一般使用的时候都只是当做存储元素的临时容器),而Array是可以在外部进行声明的,这时它就是全局数组。所以,单看这点,它们的使用已经有区别,如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里,但是如果我们单纯只是想要以数组的形式保存数据,方便我们进行查找,那么,我们就选择ArrayList。而且还有一个地方是必须知道的,就是如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据,那么,使用ArrayList就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻烦,那么,我们可以考虑选择LinkedList。

  5.用try catch的时候,要加finally吗?

  1> try、catch、finally语句中,在如果try语句有return语句,则返回的之后当前try中变量此时对应的值,此后对变量做任何的修改,都不影响try中return的返回值

  2> 如果finally块中有return 语句,则返回try或catch中的返回语句忽略。

  3 >如果finally块中抛出异常,则整个try、catch、finally块中抛出异常

  所以使用try、catch、finally语句块中需要注意的是

  1> 尽量在try或者catch中使用return语句。通过finally块中达到对try或者catch返回值修改是不可行的。

  2 >finally块中避免使用return语句,因为finally块中如果使用return语句,会显示的消化掉try、catch块中的异常信息,屏蔽了错误的发生

  3 >finally块中避免再次抛出异常,否则整个包含try语句块的方法回抛出异常,并且会消化掉try、catch块中的异常

  6.奇数判断

  看看下面的代码行,并确定如果他们可以用来精确地识别一个给定的数字是否是奇数?

  奇数可以被定义为被2整除余数为1的整数。表达式 num% 2 计算的是 num整除 2 时所产生的余数,因此看起来这个程序应该能够正确运转。遗憾的是,它不能;它在四分之一的时间里返回的都是错误的答案。

  为什么是四分之一?因为在所有的 int 数值中,有一半都是负数,而 isOdd 方法对于对所有负奇数的判断都会失败。在任何负整数上调用该方法都回返回 false ,不管该整数是偶数还是奇数。

  这是 Java 对取余操作符(%)的定义所产生的后果。该操作符被定义为对于所有的 int 数值 a 和所有的非零 int 数值b,都满足下面的恒等式:

  (a / b) * b + (a % b) == a

  现在进行修改如下:

  使用此代码,不仅是解决了奇数的负的问题,而且这个代码也高度优化。因为,算术和逻辑运算的速度更快,比除法和乘法,结果取得了更快。

  7. 单引号和双引号之间的区别

  尝试运行上面的程序。这个程序演示了一个死锁。这种死锁的产生是因为两个线程都在等待其他线程所抓取的资源。他们都不在任何一个版本。从代码,似乎还“HaHa”是回来了,但它实际上返回ha169。原因是,如果使用双引号,字符串对待,但在单引号的情况下,字符自动转换为int型,进行计算。

  8. 通过简单的技巧避免内存泄漏

  内存泄漏经常会导致软件的性能退化。因为,java自动管理内存,开发商没有太多的控制。但仍有一些标准的做法,可以用来防止内存泄漏。

  当查询完成时,总是释放数据库连接。

  尽量使用 Finally 块。

  释放存储在静态表中的实例。

  9. 避免死锁

  死锁出现的原因有很多。避免死锁不是一句话就能解决的。通常来说,当某个同步对象在等待另一个同步对象所拥有的资源上的锁时,便会产生死锁。    

 三种用于避免死锁的技术:

  1>加锁顺序

  2>加锁时限

  3>死锁检测

  一个更好的方案是给这些线程设置优先级,让一个(或几个)线程回退,剩下的线程就像没发生死锁一样继续保持着它们需要的锁。如果赋予这些线程的优先级是固定不变的,同一批线程总是会拥有更高的优先级。为避免这个问题,可以在死锁发生的时候设置随机的优先级。

  10.JAVA运行内存的设置

  一些java应用程序可以被高度的CPU密集型以及他们需要很多内存。这样的应用程序通常运行速度慢,因为内存高的要求。所以,我们可以在相关的配置文件中进行修改调整内存大小。

  Xms = 设置内存初始化的大小

  Xmx = 设置最大能够使用内存的大小

  XX:PermSize =初始大小,将分配给JVM的启动过程

  XX:MaxPermSize = 最大尺寸可以分配JVM的启动过程  

 蓝鸥科技西安中心,移动互联网科技育人专家,教育部产学合作协同育人项目承办企业,专注西安Java培训、西安大数据培训、西安VR/AR培训、西安HTML5培训、西安PHP培训,选择蓝鸥,不止高薪更是高起点!


  1. ES6标准入门
  2.  Angular2最全首发
  3. JavaScript面向对象
  4. Linux终极开发宝典