JAVA基础知识|小知识点

Posted 无聊的三文鸡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA基础知识|小知识点相关的知识,希望对你有一定的参考价值。

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("字符串为空");
}
View Code

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;
    }
View Code

 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));
    }
View Code

6、LocalDate与Date

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

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

技术分享图片
Object obj = "test";
if (obj instanceof String) {
    String str = (String) obj;
    System.out.println(str);
}
View Code

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

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 × × ×
friendly × ×

注:不写时默认为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", 24);
System.out.println(message);
System.out.printf("Hello,%s.Next year,you‘ll be %d", "jyy", 24);
View Code

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

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);
View Code

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

 











以上是关于JAVA基础知识|小知识点的主要内容,如果未能解决你的问题,请参考以下文章

python小知识片段

Flutterflutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘(代码片段

java知识28 Java封装多测师

java小知识点6

Java中常量小知识

[Java]Java小知识总结01