zoukankan      html  css  js  c++  java
  • Java新手问题集锦

    Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在。

    有超过30亿的设备是运行在Java之上的。根据Oracle的统计数据,光是使用中的Java Card就有有50亿。

    超过900万程序员选择使用Java进行开发,它是最受开发人员欢迎的语言,同时也是最流行的开发平台。

    本文为那些准Java程序员们准备了一系列广为流传的Java最佳编程实践:

    优先返回空集合而非null

    如果程序要返回一个不包含任何值的集合,确保返回的是空集合而不是null。这能节省大量的"if else"检查。

    public class getLocationName {
        return (null==cityName ? "": cityName);
    }

    谨慎操作字符串

    如果两个字符串在for循环中使用+操作符进行拼接,那么每次循环都会产生一个新的字符串对象。这不仅浪费内存空间同时还会影响性能。

    类似的,如果初始化字符串对象,尽量不要使用构造方法,而应该直接初始化。比方说:

    //Slower Instantiation
    String bad = new String("Yet another string object");
         
    //Faster Instantiation
    String good = "Yet another string object"

    判断奇数

    看下这几行代码,看看它们是否能用来准确地判断一个数是奇数?

    public boolean oddOrNot(int num) {
        return num % 2 == 1;
    }
    

    看似是对的,但是每执行四便会有一个错误的结果(用数据说话)。考虑到负奇数的情况,它除以2的结果就不会是1。因此,返回值是false,而这样是不对的。

    代码可以修改成这样:

    public boolean oddOrNot(int num) {
        return (num & 1) != 0;
    }
    

    这么写不光是负奇数的问题解决了,并且还是经过充分优化过的。因为算术运算和逻辑运行要比乘除运算更高效,计算的结果也会更快。

    单引号与双引号的区别

    public class Haha {
        public static void main(String args[]) {
        System.out.print("H" + "a");
        System.out.print('H' + 'a');
        }
    }
    

    看起来这段代码会返回"Haha",但实际返回的是Ha169。原因就是用了双引号的时候,字符会被当作字符串处理,而如果是单引号的话,

    字符值会通过一个叫做基础类型拓宽的操作来转换成整型值。然后再将值相加得到169。

    一些防止内存泄露的小技巧

    内存泄露会导致软件的性能降级。由于Java是自动管理内存的,因此开发人员并没有太多办法介入。不过还是有一些方法能够用来防止内存泄露的。

    • 查询完数据后立即释放数据库连接
    • 尽可能使用finally块
    • 释放静态变量中的实例

    如何计算Java中操作的耗时

    在Java中进行操作计时有两个标准的方法:System.currentTimeMillis()和System.nanoTime()。问题就在于,什么情况下该用哪个。从本质上来讲,他们的作用都是一样的,但有以下几点不同:

    • System.currentTimeMillis()的精度在千分之一秒到千分之15秒之间(取决于系统)而System.nanoTime()则能到纳秒级。
    • System.currentTimeMillis读操作耗时在数个CPU时钟左右。而System.nanoTime()则需要上百个。
    • System.currentTimeMillis对应的是绝对时间(1970年1月1日所经历的毫秒数),而System.nanoTime()则不与任何时间点相关。

    Float还是double

    图片描述

    在对精度要求高的场景下,double类型相对float要更流行一些,理由如下:

    大多数处理器在处理float和double上所需的时间都是差不多的。而计算时间一样的前提下,double类型却能提供更高的精度。

    简单字符串查找

    Java提供了一个库函数叫做indexOf()。这个方法可以用在String对象上,它返回的是要查找的字符串所在的位置序号。如果查找不到则会返回-1

    邮件发送

    在Java中发送邮件也很简单。你只需装一下Java Mail这个jar包,放到你的类路径里即可。在下面的代码中,我们设置了几个基础属性,然后便可以发送邮件了:

    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    
    public class SendEmail
    {
        public static void main(String [] args)
        {    
            String to = "recipient@gmail.com";
            String from = "sender@gmail.com";
            String host = "localhost";
    
            Properties properties = System.getProperties();
            properties.setProperty("mail.smtp.host", host);
            Session session = Session.getDefaultInstance(properties);
    
            try{
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
    
                message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
    
                message.setSubject("My Email Subject");
                message.setText("My Message Body");
                Transport.send(message);
                System.out.println("Sent successfully!");
            }
            catch (MessagingException ex) {
                ex.printStackTrace();
            }
        }
    }

    原文:30 Java Programming Tips and Best Practices for Beginners



  • 相关阅读:
    C++ 多线程 (4) 互斥量(mutex)与锁(lock)
    C++ 多线程(3)std::thread 详解
    c++ 多线程(2)创建线程对象的方法
    CMake解决c++11的phread库问题:undefined reference to `pthread_create’
    生成对抗网络--Generative Adversarial Networks (GAN)
    语义分割(semantic segmentation)——U-Net
    目标检测SSD: Single Shot MultiBox Detector
    基于内容的图像检索(CBIR) ——以图搜图
    去噪自动编码器
    利用Chrome开发者工具功能进行网页整页截图的方法
  • 原文地址:https://www.cnblogs.com/justBobo/p/10739503.html
Copyright © 2011-2022 走看看