菜鸟驿站的评论区还挺有用的
修饰符
访问控制符是一组限定类、属性或方法是否可以被程序里的其他部分访问和调用的修饰符。类的访问控制符只能是空或者 public,方法和属性的访问控制符有 4 个,分别是 public、 private、protected 和 friendly,其中 friendly 是一种没有定义专门的访问控制符的默认情况。
- private
用 private 修饰的类成员,只能被该类自身的方法访问和修改,而不能被任何其他类(包括该类的子类)访问和引用。因此,private 修饰符具有最高的保护级别。例如,设 PhoneCard 是电话卡类,电话卡都有密码,因此该类有一个密码域,可以把该类的密码域声明为私有成员。 - friendly(默认)
如果一个类没有访问控制符,说明它具有默认的访问控制特性。这种默认的访问控制权规定,该类只能被同一个包中的类访问和引用,而不能被其他包中的类使用,即使其他包中有该类的子类。这种访问特性又称为包访问性(package private)。
同样,类内的成员如果没有访问控制符,也说明它们具有包访问性,或称为友元(friend)。定义在同一个文件夹中的所有类属于一个包,所以前面的程序要把用户自定义的类放在同一个文件夹中(Java 项目默认的包),以便不加修饰符也能运行。 - protected
用保护访问控制符 protected 修饰的类成员可以被三种类所访问:该类自身、与它在同一个包中的其他类以及在其他包中的该类的子类。使用 protected 修饰符的主要作用,是允许其他包中它的子类来访问父类的特定属性和方法,否则可以使用默认访问控制符。
ps:如 Object.class 中的 finalize() 方法,因为有 protected 修饰保护,所以不能直接调用,根据 protected 的规则可知,需要继承并重写才可以用… - public
当一个类被声明为 public 时,它就具有了被其他包中的类访问的可能性,只要包中的其他类在程序中使用 import 语句引入 public 类,就可以访问和引用这个类。
类中被设定为 public 的方法是这个类对外的接口部分,避免了程序的其他部分直接去操作类内的数据,实际就是数据封装思想的体现。每个 Java 程序的主类都必须是 public 类,也是基于相同的原因。
http://c.biancheng.net/view/965.html
https://www.runoob.com/java/java-modifier-types.html
https://blog.csdn.net/xieyunc/article/details/102643543?spm=1001.2014.3001.5506
基本数据类型
Java语言提供了八种基本数据类型。六种数字类型(四个整数型,两个浮点型)【byte,short,int,long,float,double】,一种字符类型【char】,还有一种布尔型【boolean】。多提一句:三种引用数据类型:数组,类,接口。
Number & Math 类
然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。
包装类 | 基本数据类型 |
---|---|
Boolean | boolean |
Byte | byte |
Short | short |
Integer | int |
Long | long |
Character | char |
Float | float |
Double | double |
这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。 |
Java Integer类详解:http://c.biancheng.net/view/890.html
Integer 类的常用方法:
parseInt() 方法:https://www.runoob.com/java/number-parseint.html
toString() 方法:https://www.runoob.com/java/number-tostring.html
valueOf() 方法:https://www.runoob.com/java/number-valueof.html
Number & Math 类常用的一些方法:
pow() 求次方方法:https://www.runoob.com/java/number-pow.html
abs() 求绝对值方法:https://www.runoob.com/java/number-abs.html
max() 求两个参数中最大值方法:https://www.runoob.com/java/number-max.html
random() 用于返回一个随机数方法:https://www.runoob.com/java/number-random.html
CharSequence
CharSequence是一个描述字符串结构的接口,在这个接口里面一般发现有三种常用的子类:
通过它们之间的关系图可知:String 继承于CharSequence,也就是说String也是CharSequence类型。
CharSequence是一个接口,它只包括 int length(),char charAt(int index),CharSequence subSequence(int start, int end) 这几个API接口。除了String实现了CharSequence之外,StringBuffer和StringBuilder也实现了CharSequence接口。
需要说明的是,CharSequence就是字符序列,String, StringBuilder和StringBuffer本质上都是通过字符数组实现的!
StringBuilder 和 StringBuffer 的区别:
StringBuilder 和 StringBuffer都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了CharSequence接口。
但是,StringBuilder是非线程安全的,而StringBuffer是线程安全的。
String 类
在 Java 中字符串属于对象,Java 提供了 String类 来创建和操作字符串。
注意:String 类是不可改变的,每次操作都会产生新的String对象,所以你一旦创建了 String 对象,那它的值就无法改变了(详看笔记部分解析)。
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
- 返回指定索引处的 char 值。char charAt(int index)
- 用于两种方式的比较。
— 字符串与对象进行比较。int compareTo(Object o)
— 按字典顺序比较两个字符串。int compareTo(String anotherString) - 将指定字符串连接到此字符串的结尾。 String concat(String str)
- 返回指定数组中表示该字符序列的 String。static String copyValueOf(char[] data)
- 将此字符串与指定的对象比较。boolean equals(Object anObject)
- 将字符从此字符串复制到目标字符数组。void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
- 返回指定字符在此字符串中第一次出现处的索引。indexOf() 有四种形式。
- 返回指定字符在此字符串中最后一次出现处的索引。lastIndexOf() 有四种形式。
- 返回此字符串的长度。int length()
- 用于检测两个字符串在一个区域内是否相等。boolean regionMatches(int toffset, String other, int ooffset, int len)
- 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。String replace(char oldChar, char newChar)
- 根据给定正则表达式的匹配拆分此字符串。String[] split(String regex)
- 返回一个新字符串,它是此字符串的一个子字符串。String substring(int beginIndex, int endIndex)(忽略空格), CharSequence subSequence(int beginIndex, int endIndex)(不忽略?)。
- 将此字符串转换为一个新的字符数组。char[] toCharArray()
- 使用默认语言环境的规则将此 String 中的所有字符都转换为 小写String toLowerCase() / 大写String toUpperCase()。
- 返回此对象本身(它已经是一个字符串!)。String toString()
- 判断是否包含指定的字符系列。contains(CharSequence chars)
- 判断字符串是否为空。isEmpty()
StringBuffer 和 StringBuilder 类
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
区别:StringBuilder是非线程安全的,而StringBuffer是线程安全的。
性能:StringBuilder > StringBuffer > String
场景:经常需要改变字符串内容时使用,优先使用StringBuilder,多线程使用共享变量时使用StringBuffer。
主要方法:
方法描述 | 方法 |
---|---|
将指定的字符串追加到此字符序列。 | public StringBuffer append(String s) |
将此字符序列用其反转形式取代。 | public StringBuffer reverse() |
移除此序列的子字符串中的字符。 | public delete(int start, int end) |
将 int 参数的字符串表示形式插入此序列中。 | public insert(int offset, int i) |
将 str 参数的字符串插入此序列中。 | insert(int offset, String str) |
使用给定 String 中的字符替换此序列的子字符串中的字符。 | replace(int start, int end, String str) |
数组
https://www.runoob.com/java/java-array.html
https://blog.csdn.net/qq_42142477/article/details/83690665
Arrays 类【重点】
日期时间
https://www.runoob.com/java/java-date-time.html
Java 8 的变化:
https://blog.csdn.net/wangdong5678999/article/details/81159690
https://www.jianshu.com/p/2949db9c3df5
java.util 包提供了 Date 类来封装当前的日期和时间。Java中获取当前日期和时间,使用 Date 对象的 toString() 方法来打印当前日期和时间。
public static void main(String args[]) {
// 初始化 Date 对象
Date date = new Date();
// 使用 toString() 函数显示日期时间
System.out.println(date.toString());
}
以上实例编译运行结果如下:
Mon May 04 09:51:52 CDT 2013
使用 SimpleDateFormat 格式化日期:
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。例如:
public static void main(String args[]) {
Date dNow = new Date( );
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
System.out.println("当前时间为: " + ft.format(dNow));
}
这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。日期和时间的格式化编码详见开头的链接。
以上实例编译运行结果如下:
当前时间为: 2018-09-06 10:16:34
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象:
Calendar c = Calendar.getInstance();//默认是当前日期
详细见链接。
GregorianCalendar类
Calendar类实现了公历日历,GregorianCalendar是Calendar类的一个具体实现。
Calendar 的getInstance()方法返回一个默认用当前的语言环境和时区初始化的GregorianCalendar对象。
详细见链接。
Java 流(Stream)、文件(File)和IO
https://www.runoob.com/java/java-files-io.html
杂记
JAVA类型直接输入超过10位报The literal XXX of type int is out of range 解决办法:https://blog.csdn.net/xxdw1992/article/details/83927333
Java 实例 - 阶乘:https://www.runoob.com/java/method-factorial.html
Java Scanner 类:https://www.runoob.com/java/java-scanner-class.html