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

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 × × ×
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);

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

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

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

原文地址:https://www.cnblogs.com/maikucha/p/8328560.html

时间: 2024-09-29 06:25:40

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

java基础知识小小结

java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程序的文件名就可以随意命名了. 文档注释,是以单斜线加两个星形标记( /**)开头,并以一个星形标记加单斜线( */)结束.用这种方法注释的内容会被解释成程序的正式文档,并能包含进如 javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法. Java 把整数常量的数据类型均视为 int

java 基础知识(知识点)

1.java 有类的 重写和重载2种:重载是同一类中,方法名相同,参数不同的方法:而重写是子类继承父类方法,重新编写 (@Override) [注]oc 没有重载只有重写,并且还叫重载 2.static :表示类的意思:如果 修饰属性,表示这个属性为全局的属性,并且所有的成员变量的这个属性都是相同的值: 修饰 方法,表示这个方法为类方法,类方法只能调用类属性: 3非静态代码块 想一个不带参数的构造器,而静态代码块(static修饰)会先执行,并且只执行一次(类加载的时候) 4.extends :

java基础语法小知识点总结:(一次小测试)

1.JAVA标识符的规则是这样的 标识符由字母.数字.下划线“_”.美元符号“$”或者人民币符号“¥”组成,并且首字母不能是数字.也就是说除了_ $ ¥这3个符号外,标识符只能有数字和字母,什么括号,这样那样的都不是标识符的组成部分. 不能把关键字和保留字作为标识符. 标识符没有长度限制. String $1; String Y2; String idfkd$fff; String adkYdkjk; String _djfkdj; String dkjfkdj_dfe; String f444

java基础知识小总结

在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程序的文件名就可以随意命名了. 文档注释,是以单斜线加两个星形标记( /**)开头,并以一个星形标记加单斜线( */)结束.用这种方法注释的内容会被解释成程序的正式文档,并能包含进如 javadoc之类的工具生成的文档里,用以说明该程序的层次结构及其方法. Java 把整数常量的数据类型均视为 int 型,因此,如果在程序中

Java多线程知识小抄集(三)

本文主要整理博主遇到的Java多线程的相关知识点,适合速记,故命名为"小抄集".本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆. 51. SimpleDateFormat非线程安全 当多个线程共享一个SimpleDateFormat实例的时候,就会出现难以预料的异常. 主要原因是parse()方法使用calendar来生成返回的Date实例,而每次parse之前,都会把calendar里的相关属性清除掉.问题是这个calendar是

JAVA基础知识整理

一.首先先明白get与post的基本定义和区别: 这是两种在客户端和服务器端进行请求-响应的方法. 1get:从指定的资源请求数据. 2post:向指定的资源提交要处理的数据. get基本上用于从服务器取回数据,注意:get方法可能返回缓存数据. post可以从服务器上获取数据,不过,post方法不会缓存数据,并且常用语连同请求一起发送数据. 二. Jquery $.get()方法. $.get()方法通过Http Get发起请求,从服务器上请求数据. 语法:&.get(URL,callback

【java基础知识总结】-特别针对零基础学习JAVA的初学者

JAVA基础知识总结,对于大多数想要学习JAVA编程语言的人员来说或者对于那些已经在学习路上的新手来说,掌握以下的JAVA基础知识,或许将更有利于你快速掌握好这门语言.以下是本人对JAVA基础知识做了一下小结,如有纰漏,还望大家不吝赐教. 1.对象的初始化 (1)非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化. 基本类型:int型,初始化为0. 如果为对象:这些对象会按顺序初始化. ※在所有类成员初始化完成之后,才调用本类的构造方法创建对象. 构造方法的作用就是初始化

Java基础知识的三十个经典问答

Java基础知识的三十个经典问答 1.面向对象的特点 抽象: 抽象是或略一个主题中与当前目标的无关的因素,一边充分考虑有关的内容.抽象并不能解决目标中所有的问题,只能选择其中的一部分,忽略其他的部分.抽象包含两个方面:一是过程抽象:一是数据抽象. 继承 继承是一种联接类的层次模型,允许和鼓励类的重用,提供了一种明确的共性的方法.对象的一个新类可以从现有的类中派生,这叫做类的继承.心累继承了原始类 的特性,新类称为原始类的派生类或者是子类,原始类称为新类的基类或者父类.子类可以从父类那里继承父类的

长沙软件培训:Java基础知识总结(一)

Java本身知识点非常多,长沙软件培训在这里不做全面论述,仅做为一个引子,以增进理解和记忆,欢迎各位朋友与我进行探讨,共同进步. Java基础知识总结(一) 1. import关键字 (1)import语句必须定义在所有的class定义之前. (2)import语句只是为编译器指明了一个路径,并不像C或C++中的#include,所以用import .*并不影响性能 2.Java中的类名与文件名 (1).在一个java文件中可以有多于一个类定义(更常见于某些组件的监听器类),但只能有一个 pub