Java软件编码规范要求
1.一个类对应一个文件,文件名与类名保持一致
虽然一个“.java”源文件可以有多个类(不是内部类),但是不提倡那么写。
2.今天在写代码的时候无意间发现了 if 和 else 后面不用带括号
if (Boolean) true else false
有大括号的时候
大括号里面所有的 都归if管。只有条件为真的时候 才会执行。
没有大括号的时候 只有下面的一句归if管,
也就是说 当只有一句的时候 大括号可以省略 其它的 没区别。
这种情况,没多久就忘了,再记录一次,加深印象。不然读代码的时候让人很疑惑。
java规范里面很多都有这样的要求: if后面即使只有一句也都要使用大括号,不只是直观,很多时候能帮我们避免很多错误。以后编程一定要尽量根据规范进行。
3.在删除某个类时候,一定别忘记把对应的import也删除掉:
可以手动删除,也可以 Ctrl+Shift+O快捷键自动删除和导入。
4.禁止使用 引入整个包的 import java.io.*;
①这样虽然方便,但是当导入包中所有的类时,java编译器就会用额外的内存来存储包中类和方法的名字,以便跟踪这个包中所有的元素,这在pc机上没有太大的性能差异。然而当在手持设备上,一般的手持设备内存都比较小,这种方式就不太好了,更适合第一种方式想引用哪个类就具体引用哪个
②当通过网络远程加载一个类时,如果它导入了一包中所有的类,那么在加载的时候就会把所有的类和方法加载到本地来,这就会造成java程序执行时间上的延迟。
所以只有当需要导入这个包中很多类的时候,再用这种方式。
扩展:在同一包中的类可以互相引用,无需import语句(非要手动加入也不会报错)
注意:java.lang包是自动引入的,不需要显式的加import引入。因此可以直接引用System、String
扩展阅读:Java import的作用 :https://www.cnblogs.com/lukelook/p/12834940.html
避免使用静态导入
static import这么叼那它有什么负面影响吗?
答案是肯定的,去掉静态成员前面的类型名,固然有助于在频繁调用时显得简洁,但是同时也失去了关于“这个东西在哪里定义”的提示信息,理解或维护代码就呵呵了。
但是如果导入的来源很著名(比如java.lang.Math),这个问题就不那么严重了。
按需导入机制
使用按需导入声明是否会降低Java代码的执行效率?
绝对不会!
一、import的按需导入
import java.util.*; public class NeedImportTest { public static void main(String[] args) { ArrayList tList = new ArrayList(); } }
编译之后的class文件 :
//import java.util.*被替换成import java.util.ArrayList //即按需导入编译过程会替换成单类型导入。 import java.util.ArrayList; public class NeedImportTest { public static void main(String[] args) { new ArrayList(); } }
二、static import的按需导入
import static com.assignment.test.StaticFieldsClass.*; public class StaticNeedImportTest { public static void main(String[] args) { System.out.println(staticField); staticFunction(); } }
上面StaticNeedImportTest 类编译之后 :
/可以看出 : //1、static import的精准导入以及按需导入编译之后都会变成import的单类型导入 import com.assignment.test.StaticFieldsClass; public class StaticNeedImportTest { public static void main(String[] args) { //2、编译之后“打回原形”,使用原来的方法调用静态成员 System.out.println(StaticFieldsClass.staticField); StaticFieldsClass.staticFunction(); } }
附加
这是否意味着你总是可以使用按需导入声明?
是,也不是!
在类似Demo的非正式开发中使用按需导入声明显得很有用。
然而,有这四个理由让你可以放弃这种声明:
编译速度:在一个很大的项目中,它们会极大的影响编译速度.但在小型项目中使用在编译时间上可以忽略不计。
命名冲突:解决避免命名冲突问题的答案就是使用全名。而按需导入恰恰就是使用导入声明初衷的否定。
说明问题:毕竟高级语言的代码是给人看的,按需导入看不出使用到的具体类型。
无名包问题:如果在编译单元的顶部没有包声明,Java编译器首选会从无名包中搜索一个类型,然后才是按需类型声明。如果有命名冲突就会产生问题。
Sun的工程师一般不使用按需类型导入声明.这你可以在他们的代码中找到:
在java.util.Properties类中的导入声明:
import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.io.OutputStreamWriter; import java.io.BufferedWriter; import java.security.AccessController; import java.security.PrivilegedAction;
可以看到他们用单类型导入详细的列出了需要的java.io包中的具体类型。