1、强烈建议,不使用char类型

那么,到底为什么java里不推荐使用char类型呢?其实,1个java的char字符并不完全等于一个unicode的字符。char采用的UCS-2编码,是一种淘汰的UTF-16编码,编码方式最多有65536种,远远少于当今Unicode拥有11万字符的需求。java只好对后来新增的Unicode字符用2个char拼出1个Unicode字符。导致String中char的数量不等于unicode字符的数量。

然而,大家都知道,char在Oracle中,是固定宽度的字符串类型(即所谓的定长字符串类型),长度不够的就会自动使用空格补全。因此,在一些特殊的查询中,就会导致一些问题,而且这种问题还是很隐蔽的,很难被开发人员发现。一旦发现问题的所在,就意味着数据结构需要变更,可想而知,这是多么大的灾难啊。

2、final修饰的常量

用关键字final指示常量,关键字final表示这个变量只能被赋值一次,一旦被赋值,就不能再更改了,习惯上,常量名使用全大写。

如果经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量,使用关键字static final修饰。

3、检查字符串是否为null也不为空串

if (str != null && str.length() != 0) {
System.out.println("字符串不为空");
} else {
System.out.println("字符串为空");
}

4、“==”与“equals”的区别

“==”:

1)用于比较值类型(int、float、boolean等)

2)用于比较引用类型,如果两个对象的引用地址相同,则返回true

“equals”:

1)用于比较引用类型,默认情况下与“==”的返回结果相同

2)由开发者覆写此方法,自己定义逻辑。比如常见的String类对此方法的覆写,覆写过后,即使两个对象的引用地址不同,返回结果仍然可以相同

    public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

5、Objects.equals(A,B)与A.equals(B)比较

查看源码,会发现Objects.equals(A,B)方法在比较之前,会先检查A是否为空,避免程序报空指针的异常

    public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}

6、LocalDate与Date

如果只想对日期进行操作,而不对时间点进行操作,建议使用LocalDate类,而不是Date类,前者拥有更多的操作方法,后者的方法已经逐渐被废弃

7、在将父类转换成子类之前,应该使用instanceof进行检查

Object obj = "test";
if (obj instanceof String) {
String str = (String) obj;
System.out.println(str);
}

尽量避免进行强制类型转换,可以通过重新设计父类的方式,来避免这种操作

8、public class 与 class

public class是公共类的意思,public是访问修饰符。java规定一个类文件中,public修饰的class只有一个,并且类名必须和这个类的文件名一样,所以一个类文件中可以有多个类,但由public修饰的类只能有一个

备注:protected、private很少会用于修饰类

9、public、protected、private修饰符

这里说的修饰,主要是对类中的方法、域等进行修饰

在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,可以认为他们都是自己的子女,而对于和自己一个目录(同一个包路径)下的class,认为都是自己的朋友。
 
1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
 
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
 
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

作用域 当前类 同一个package 子孙类 其他package
public  √  √
protected  √ ×
private × × ×
default × ×

注:不写时默认为friendly

10、Integer.valueOf()与Integer.parseInt()

Integer.parseInt()把String类型转换为int类型
Integer.valueOf()把String类型转换为Integer对象

11、格式化输出

String message = String.format("Hello,%s.Next year,you'll be %d", "jyy", );
System.out.println(message);
System.out.printf("Hello,%s.Next year,you'll be %d", "jyy", );

转换符,不需要特意的记忆,使用的时候,再进行查找

12、switch语句

如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case语句,这种情况相当危险,为此,我们程序中从不使用switch语句。

13、不定长数组-ArrayList

        //初始化
ArrayList<Car> arrayList = new ArrayList<>();
//添加
arrayList.add(new Car(1001, "奔驰", 200));
arrayList.add(new Car(1002, "宝马", 300));
//在中间位置添加
arrayList.add(1, new Car(1003, "保时捷", 500));
//修改
arrayList.set(0, new Car(1001, "奥迪", 400));
//查询
Car c = arrayList.get(0);
System.out.println(c.toString());
//删除
arrayList.remove(2);
//查询长度
arrayList.size();
//转数组
Car[] cars = new Car[arrayList.size()];
arrayList.toArray(cars);

对数组实施插入和删除元素的操作其效率很低。对于小型数组来说,这一点也不必担心。但如果数组存储的元素数比较多,又经常在中间位置插入、删除元素,就应该考虑使用链表来处理了。

14、类修饰符

只有内部类可以是私有类(private),而常规类只可以具有包可见性(默认),或公有可见性(public)

15、受检异常和非受检异常(运行时异常)

Error类和Exception类都是继承Throwable类,RunTimeException继承Exception类。

1、受检异常,编译会报错,开发时就必须处理。非受检异常,编译不会报错,一般是开发的漏洞或者失误,由人主导,尽量避免。

2、RunTimeException类、Error类及其子类,属于非受检异常,如:NullPointerException、IndexOutOfBoundsException等。

除了上面之外的异常属于受检异常。

备注:Error类是系统中的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。

3、如果方法里面抛出了受检异常,那么方法的签名必须throws这个异常,调用方也会被强制try-catch处理这个异常,这是编译级别的限制

   如果是RunTimeException或者Error类及其子类那就是非受检的,这种异常在方法内抛出,不需要在方法的签名上throws

如何使用?

1、如果抛出的异常是可恢复的,同时我们也期望API的调用者捕获异常进行恢复处理,那么我们应该使用受检异常。受检异常会强迫API的使用者截获异常并恢复处理,或者进行声明继续抛出。

2、虽然受检异常是Java语言一项很好的特性,它强迫程序员处理异常,大大增强程序的可靠性。但是过分的使用受检异常会使API使用非常不方便,调用者必须在catch块中处理所有的受检异常,或者调用者必须声明抛出这些受检异常。

总而言之,对于可恢复的情况,使用受检异常;如果不清楚是否可能恢复,则最好使用未受检异常。

16、String的特别之处

String虽然是引用类型,但是它可以不使用new关键字进行创建,而且创建的对象保存在常量池中,而不是堆中。如:String A ="abc";如果常量池中已经存在"abc",就会直接把引用传递给A,而不是生成新的"abc"。如果使用String A = new String("abc"),每一次调用都会在堆中生成新的对象。

17、try-with-resources

语法糖:建议将try-finally替换为try-with-resources

Connections, streams, files, and other classes that implement the Closeable interface or its super-interface, AutoCloseable, needs to be closed after use. 
Further, that close call must be made in a finally block otherwise an exception could keep the call from being made. Preferably,
when class implements AutoCloseable, resource should be created using "try-with-resources" pattern and will be closed automatically.

Java库中有很多资源需要手动关闭,比如InputStream、OutputStream、java.sql.Connection等等。在此之前,通常是使用try-finally的方式关闭资源;Java7之后,推出了try-with-resources声明来替代之前的方式。 try-with-resources 声明要求其中定义的变量实现 AutoCloseable 接口,这样系统可以自动调用它们的close方法,从而替代了finally中关闭资源的功能。

举个栗子,按照原本try-catch-finally的写法:

        OutputStream outputStream = null;
FileInputStream fileInputStream = null;
try {
outputStream = response.getOutputStream();
fileInputStream = new FileInputStream(xmlPath);
byte[] b = new byte[1024];
int i;
while ((i = fileInputStream.read(b)) > 0) {
outputStream.write(b, 0, i);
}
outputStream.flush();
} catch (Exception e) {
logger.error(e.toString());
} finally {
if (outputStream != null) {
outputStream.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}
}

替换成try-with-resources之后:

            try (FileInputStream fileInputStream = new FileInputStream(xmlPath); OutputStream outputStream = response.getOutputStream()) {
byte[] b = new byte[1024];
int i;
while ((i = fileInputStream.read(b)) > 0) {
outputStream.write(b, 0, i);
}
outputStream.flush();
} catch (Exception e) {
logger.error(e.toString());
}

try-with-resources将会自动关闭try()中的资源,并且将先关闭后声明的资源。

18、@Suppresswarnings

@Suppresswarnings注解,可以消除代码中的警告,可以作用于类、属性、方法、方法入参、构造函数和方法的局部变量。

关键字 描述
all to suppress all warnings (将方法块里面所有的warning都取消)
cast to suppress warnings relative to cast operations
dep-ann to suppress warnings relative to deprecated annotation (取消对已弃用的注释的警告)
deprecation to suppress warnings relative to deprecation( 使用了不赞成使用的类或方法时的警告)
fallthrough
to suppress warnings relative to missing breaks in switch statements(当 Switch 程序块直接通往下一种情况而没有 Break 时的警告。)
finally to suppress warnings relative to finally block that don’t return(任何 finally 子句不能正常完成时的警告)
hiding to suppress warnings relative to locals that hide variable(取消对隐藏变量的警告)
incomplete-switch
to suppress warnings relative to missing entries in a switch statement (enum case) (取消对switch里面缺少case条目的警告)
null to suppress warnings relative to null analysis(取消对null分析的警告)
nls to suppress warnings relative to non-nls string literals (取消对 non-nls字符串的警告)
path 在类路径、源文件路径等中有不存在的路径时的警告。
rawtypes
to suppress warnings relative to un-specific types when using generics on class params (当在类参数中使用非特定的泛型时,取消警告)
restriction to suppress warnings relative to usage of discouraged or forbidden references (取消使用不鼓励或禁止的引用的警告)
serial
to suppress warnings relative to missing serialVersionUID field for a serializable class(当在可序列化的类上缺少 serialVersionUID 定义时的警告。)
static-access
to suppress warnings relative to incorrect static access(取消不正常的静态访问的警告)
synthetic-access to suppress warnings relative to unoptimized access from inner classes
unchecked
to suppress warnings relative to unchecked operations(执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型。)
unqualified-field-access to suppress warnings relative to field access unqualified
unused to suppress warnings relative to unused code (将未使用的方法的warning取消)
WeakerAccess 禁止“Access can be private”的警告

JAVA基础知识|小知识点的更多相关文章

  1. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  2. java基础知识小小结

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  3. 房上的猫:java基础知识部分知识点

    1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本  2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文 ...

  4. java基础知识部分知识点

    1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本  2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文 ...

  5. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  6. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  7. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  8. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  9. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

随机推荐

  1. MyEclipse j2ee工程 WEB-INF 目录内容显示

    公司项目,使用的ant打包技术,,,蛋疼刚开始以为每次改个java代码都要ant 构建编译一把3-4分钟,很没有效率,, 然后实际使用中发下,可以用 auto building 和tomcat 的re ...

  2. 修改下jsp 默认编码,避免被坑

    修改下jsp 默认编码 ![](http://images2017.cnblogs.com/blog/1128666/201710/1128666-20171017143745927-14235413 ...

  3. 微软升级 WSL Window Subsystem for Linux Win10系统自带Linux

    在设计之初,微软就允许类似于Win32这种子系统运行于windows NT内核之上,它可以为上层应用提供编程接口,同时避免应用去实现内核里的一些调用细节.NT内核的设计在最开始就可以支持POSIX,O ...

  4. Dapper 入门

    中文文档连接:https://www.w3cschool.cn/dapperorm/dapperorm-toj931f2.html 官网文档连接:https://dapper-tutorial.net ...

  5. JS实现当前选择日期是星期几

    使用到的日期插件是My97 Datepicker,这里通过onpicked方法触发getDay()方法,在getDay()方法中获取已选择的日期来判断是星期几. 插件下载地址:http://www.m ...

  6. Vivado问题集锦

    1.添加包含子IP的模块到block design,报错如下所示: 错误的后面提供了解决方法:在tcl命令行中输入如下指令,添加子IP的xci文件即可. set_property generate_s ...

  7. 【推荐】 Neutralizer 安卓上特殊的均衡器

    首先 直切正题 这个均衡器特殊就特殊在   会产生  特定频率的声音   根据声音来调整  自己喜欢的声音 下载地址: https://d-02.apkplz.org/dl.php?s=czlDeEt ...

  8. [Selenium3+python3.6]自动化测试3-八种元素元素定位(Firebug和firepath)

    参考http://www.cnblogs.com/yoyoketang/p/6123890.html   #coding=utf-8 from selenium import webdriverdri ...

  9. PyQt5多个GUI界面设计

    版权声明:本文为博主原创文章,转载 请注明出处:https://blog.csdn.net/sc2079/article/details/90454379 - 写在前面 本科毕业设计终于告一段落了.特 ...

  10. 【转】SpringBoot自定义序列化的使用方式--WebMvcConfigurationSupport

    场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串. 例如:[     {         "id": 1,       ...