Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: java
打印 上一主题 下一主题

Java学习笔记

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
11#
 楼主| 发表于 2017-7-4 14:08:13 | 只看该作者
Java Number类一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double等。
实例

int i = 5000;
float gpa = 13.65;
byte mask = 0xaf;
然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java语言为每一个内置数据类型提供了对应的包装类。
所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类。

这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number类属于java.lang包。
下面是一个装箱与拆箱的例子:
  1. public class Test{

  2.    public static void main(String args[]){
  3.       Integer x = 5; // boxes int to an Integer object
  4.       x =  x + 10;   // unboxes the Integer to a int
  5.       System.out.println(x);
  6.    }
  7. }
复制代码
当x被赋为整型值时,由于x是一个对象,所以编译器要对x进行装箱。然后,为了使x能进行加运算,所以要对x进行拆箱。

Number类的成员方法
下面的表中列出的是Number类的方法:
序号
方法与描述
1xxxValue()
将number对象转换为xxx数据类型的值并返回。
2compareTo()
将number对象与参数比较。
3equals()
判断number对象是否与参数相等。
4valueOf()
返回一个Integer对象指定的内置数据类型
5toString()
以字符串形式返回值。
6parseInt()
将字符串解析为int类型。
7abs()
返回参数的绝对值。
8ceil()
对整形变量向左取整,返回类型为double型。
9floor()
对整型变量向右取整。返回类型为double类型。
10rint()
返回与参数最接近的整数。返回类型为double。
11round()
返回一个最接近的int、long型值。
12min()
返回两个参数中的最小值。
13max()
返回两个参数中的最大值。
14exp()
返回自然数底数e的参数次方。
15log()
返回参数的自然数底数的对数值。
16pow()
返回第一个参数的第二个参数次方。
17sqrt()
求参数的算术平方根。
18sin()
求指定double类型参数的正弦值。
19cos()
求指定double类型参数的余弦值。
20tan()
求指定double类型参数的正切值。
21asin()
求指定double类型参数的反正弦值。
22acos()
求指定double类型参数的反余弦值。
23atan()
求指定double类型参数的反正切值。
24atan2()
将笛卡尔坐标转换为极坐标,并返回极坐标的角度值。
25toDegrees()
将参数转化为角度。
26toRadians()
将角度转换为弧度。
27random()
返回一个随机数。


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
12#
 楼主| 发表于 2017-7-4 14:23:37 | 只看该作者
Java Character类
使用字符时,我们通常使用的是内置数据类型char。
实例
  1. char ch = 'a';

  2. // Unicode for uppercase Greek omega character
  3. char uniChar = '\u039A';

  4. // 字符数组
  5. char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };
复制代码
然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情况。为了解决这个问题,Java语言为内置数据类型char提供了包装类Character类。
Character类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象,例如:
Character ch = new Character('a');
在某些情况下,Java编译器会自动创建一个Character对象。
例如,将一个char类型的参数传递给需要一个Character类型参数时,那么编译器会自动地将char类型参数转换为Character对象。 这种特征称为装箱,反过来称为拆箱。
实例

// Here following primitive char 'a'
// is boxed into the Character object ch
Character ch = 'a';

// Here primitive 'x' is boxed for method test,
// return is unboxed to char 'c'
char c = test('x');



前面有反斜杠(\)的字符代表转义字符,它对编译器来说是有特殊含义的。
下面列表展示了Java的转义序列:
转义序列
描述
\t在文中该处插入一个tab键
\b在文中该处插入一个后退键
\n在文中该处换行
\r在文中该处插入回车
\f在文中该处插入换页符
\'在文中该处插入单引号
\"在文中该处插入双引号
\\在文中该处插入反斜杠



Character 方法
下面是Character类的方法:
序号
方法与描述
1isLetter()
是否是一个字母
2isDigit()
是否是一个数字字符
3isWhitespace()
是否一个空格
4isUpperCase()
是否是大写字母
5isLowerCase()
是否是小写字母
6toUpperCase()
指定字母的大写形式
7toLowerCase()
指定字母的小写形式
8toString()
返回字符的字符串形式,字符串的长度仅为1
对于方法的完整列表,请参考的java.lang.Character API规范。
回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
13#
 楼主| 发表于 2017-7-4 15:12:54 | 只看该作者
Java String类字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串。
和其它对象一样,可以使用关键字和构造方法来创建String对象。
String类有11种构造方法,这些方法提供不同的参数来初始化字符串,比如提供一个字符数组参数:
  1. public class StringDemo{

  2.    public static void main(String args[]){
  3.       char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.'};
  4.       String helloString = new String(helloArray);  
  5.       System.out.println( helloString );
  6.    }
  7. }
复制代码
注意:String类是不可改变的,所以你一旦创建了String对象,那它的值就无法改变了。 如果需要对字符串做很多修改,那么应该选择使用StringBuffer & StringBuilder 类
字符串长度
用于获取有关对象的信息的方法称为访问器方法。
String类的一个访问器方法是length()方法,它返回字符串对象包含的字符数。
连接字符串

String类提供了连接两个字符串的方法:
string1.concat(string2);
返回string2连接string1的新字符串。也可以对字符串常量使用concat()方法,如:
"My name is ".concat("Zara");
更常用的是使用'+'操作符来连接字符串,如:
"Hello," + " world" + "!"
结果如下:
"Hello, world!"

创建格式化字符串
我们知道输出格式化数字可以使用printf()和format()方法。String类使用静态方法format()返回一个String对象而不是PrintStream对象。
String类的静态方法format()能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。如下所示:
  1. System.out.printf("The value of the float variable is " +
  2.                   "%f, while the value of the integer " +
  3.                   "variable is %d, and the string " +
  4.                   "is %s", floatVar, intVar, stringVar);
复制代码
你也可以这样写
  1. String fs;
  2. fs = String.format("The value of the float variable is " +
  3.                    "%f, while the value of the integer " +
  4.                    "variable is %d, and the string " +
  5.                    "is %s", floatVar, intVar, stringVar);
  6. System.out.println(fs);
复制代码
String 方法
下面是String类支持的方法,更多详细,参看Java API文档:
SN(序号)
方法描述
1char charAt(int index)
返回指定索引处的 char 值。
2int compareTo(Object o)
把这个字符串和另一个对象比较。
3int compareTo(String anotherString)
按字典顺序比较两个字符串。
4int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
5String concat(String str)
将指定字符串连接到此字符串的结尾。
6boolean contentEquals(StringBuffer sb)
当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真。
7static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
8static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
9boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
10boolean equals(Object anObject)
将此字符串与指定的对象比较。
11boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
12byte[] getBytes()
使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
13byte[] getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
14void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
15int hashCode()
返回此字符串的哈希码。
16int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
17int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18int indexOf(String str)
返回指定子字符串在此字符串中第一次出现处的索引。
19int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20String intern()
返回字符串对象的规范化表示形式。
21int lastIndexOf(int ch)
返回指定字符在此字符串中最后一次出现处的索引。
22int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
24int lastIndexOf(String str, int fromIndex)
返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25int length()
返回此字符串的长度。
26boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
27boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
28boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
29String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
30String replaceAll(String regex, String replacement
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
31String replaceFirst(String regex, String replacement)
使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
32String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
33String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
34boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
35boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36CharSequence subSequence(int beginIndex, int endIndex)
返回一个新的字符序列,它是此序列的一个子序列。
37String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
38String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
39char[] toCharArray()
将此字符串转换为一个新的字符数组。
40String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
41String toLowerCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
42String toString()
返回此对象本身(它已经是一个字符串!)。
43String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
44String toUpperCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
45String trim()
返回字符串的副本,忽略前导空白和尾部空白。
46static String valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。




回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
14#
 楼主| 发表于 2017-7-4 15:53:05 | 只看该作者
Java StringBuffer和StringBuilder类
当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder类在Java 5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
StringBuffer 方法
以下是StringBuffer类支持的主要方法:
序号
方法描述
1public StringBuffer append(String s)
将指定的字符串追加到此字符序列。
2public StringBuffer reverse()
将此字符序列用其反转形式取代。
3public delete(int start, int end)
移除此序列的子字符串中的字符。
4public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
5replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
下面的列表里的方法和String类的方法类似:
序号方法描述
1int capacity()
返回当前容量。
2char charAt(int index)
返回此序列中指定索引处的 char 值。
3void ensureCapacity(int minimumCapacity)
确保容量至少等于指定的最小值。
4void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此序列复制到目标字符数组 dst。
5int indexOf(String str)
返回第一次出现的指定子字符串在该字符串中的索引。
6int indexOf(String str, int fromIndex)
从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。
7int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引。
8int lastIndexOf(String str, int fromIndex)
返回最后一次出现的指定子字符串在此字符串中的索引。
9int length()
返回长度(字符数)。
10void setCharAt(int index, char ch)
将给定索引处的字符设置为 ch。
11void setLength(int newLength)
设置字符序列的长度。
12CharSequence subSequence(int start, int end)
返回一个新的字符序列,该字符序列是此序列的子序列。
13String substring(int start)
返回一个新的 String,它包含此字符序列当前所包含的字符子序列。
14String substring(int start, int end)
返回一个新的 String,它包含此序列当前所包含的字符子序列。
15String toString()
返回此序列中数据的字符串表示形式。


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
15#
 楼主| 发表于 2017-7-4 16:06:35 | 只看该作者

Java 数组
https://www.w3cschool.cn/java/java-array.html
Arrays 类
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
  • 给数组赋值:通过fill方法。
  • 对数组排序:通过sort方法,按升序。
  • 比较数组:通过equals方法比较数组中元素值是否相等。
  • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

具体说明请查看下表:
序号
方法和说明
1public static int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
2public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
3public static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
4public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。

回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
16#
 楼主| 发表于 2017-7-4 16:18:44 | 只看该作者
本帖最后由 java 于 2017-7-6 14:25 编辑

Java 日期时间
Java 日期时间
java.util包提供了Date类来封装当前的日期和时间。 Date类提供两个构造函数来实例化Date对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从1970年1月1日起的微秒数。
Date(long millisec)
Date对象创建以后,可以调用下面的方法。
序号
方法和描述
1boolean after(Date date)
若当调用此方法的Date对象在指定日期之后返回true,否则返回false。
2boolean before(Date date)
若当调用此方法的Date对象在指定日期之前返回true,否则返回false。
3Object clone( )
返回此对象的副本。
4int compareTo(Date date)
比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。
5int compareTo(Object obj)
若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。
6boolean equals(Object date)
当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。
7long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
8int hashCode( )
返回此对象的哈希码值。
9void setTime(long time)

用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。
10String toString( )
转换Date对象为String表示形式,并返回该字符串。

获取当前日期时间
Java中获取当前日期和时间很简单,使用Date对象的 toString()方法来打印当前日期和时间,如下所示:
  1. import java.util.Date;
  2.   
  3. public class DateDemo {
  4.    public static void main(String args[]) {
  5.        // 初始化 Date 对象
  6.        Date date = new Date();
  7.         
  8.        // 使用 toString() 函数显示日期时间
  9.        System.out.println(date.toString());
  10.    }
  11. }
复制代码
日期比较
Java使用以下三种方法来比较两个日期:
  • 使用getTime( ) 方法获取两个日期(自1970年1月1日经历的微妙数值),然后比较这两个值。
  • 使用方法before(),after()和equals()。例如,一个月的12号比18号早,则new Date(99, 2, 12).before(new Date (99, 2, 18))返回true。
  • 使用compareTo()方法,它是由Comparable接口定义的,Date类实现了这个接口。
使用SimpleDateFormat格式化日期
SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat允许你选择任何用户自定义日期时间格式来运行。例如:
  1. import java.util.*;
  2. import java.text.*;

  3. public class DateDemo {
  4.    public static void main(String args[]) {

  5.       Date dNow = new Date( );
  6.       SimpleDateFormat ft =
  7.       new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");

  8.       System.out.println("Current Date: " + ft.format(dNow));
  9.    }
  10. }
复制代码
以上实例编译运行结果如下:
  1. Current Date: Sun 2004.07.18 at 04:14:09 PM PDT
复制代码
简单的DateFormat格式化编码
时间模式字符串用来指定时间格式。在此模式中,所有的ASCII字母被保留为模式字母,定义如下:
字母
描述
示例
G纪元标记AD
y四位年份2001
M月份July or 07
d一个月的日期10
h A.M./P.M. (1~12)格式小时12
H一天中的小时 (0~23)22
m分钟数30
s秒数55
S微妙数234
E星期几Tuesday
D一年中的日子360
F一个月中第几周的周几2 (second Wed. in July)
w一年中第几周40
W一个月中第几周1
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
K A.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
'文字定界符Delimiter
"单引号`

日期和时间转换字符
字符描述例子
c完整的日期和时间Mon May 04 09:51:52 CDT 2009
FISO 8601 格式日期2004-02-09
DU.S. 格式日期 (月/日/年)02/09/2004
T24小时时间18:05:19
r12小时时间06:05:19 pm
R24小时时间,不包含秒18:05
Y4位年份(包含前导0)2004
y年份后2位(包含前导0)04
C年份前2位(包含前导0)20
B月份全称February
b月份简称Feb
n2位月份(包含前导0)02
d2位日子(包含前导0)03
e2位日子(不包含前导0)9
A星期全称Monday
a星期简称Mon
j3位年份(包含前导0)069
H2位小时(包含前导0), 00 到 2318
k2位小时(不包含前导0),  0 到 2318
I2位小时(包含前导0), 01 到 1206
l2位小时(不包含前导0),  1 到 126
M2位分钟(包含前导0)05
S2位秒数(包含前导0)19
L3位毫秒(包含前导0)047
N9位纳秒(包含前导0)047000000
P大写上下午标志PM
p小写上下午标志pm
z从GMT的RFC 822数字偏移-0800
Z时区PST
s自 1970-01-01 00:00:00 GMT的秒数1078884319
Q自 1970-01-01 00:00:00 GMT的毫妙1078884319047
还有其他有用的日期和时间相关的类。对于更多的细节,你可以参考到Java标准文档。

解析字符串为时间
SimpleDateFormat 类有一些附加的方法,特别是parse(),它试图按照给定的SimpleDateFormat 对象的格式化存储来解析字符串。例如:
  1. import java.util.*;
  2. import java.text.*;
  3.   
  4. public class DateDemo {

  5.    public static void main(String args[]) {
  6.       SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd");

  7.       String input = args.length == 0 ? "1818-11-11" : args[0];

  8.       System.out.print(input + " Parses as ");

  9.       Date t;

  10.       try {
  11.           t = ft.parse(input);
  12.           System.out.println(t);
  13.       } catch (ParseException e) {
  14.           System.out.println("Unparseable using " + ft);
  15.       }
  16.    }
  17. }
复制代码
Java 休眠(sleep)
你可以让程序休眠一毫秒的时间或者到您的计算机的寿命长的任意段时间。例如,下面的程序会休眠10秒:
  1. import java.util.*;
  2.   
  3. public class SleepDemo {
  4.    public static void main(String args[]) {
  5.       try {
  6.          System.out.println(new Date( ) + "\n");
  7.          Thread.sleep(5*60*10);
  8.          System.out.println(new Date( ) + "\n");
  9.       } catch (Exception e) {
  10.           System.out.println("Got an exception!");
  11.       }
  12.    }
  13. }
复制代码
测量时间
下面的一个例子表明如何测量时间间隔(以毫秒为单位):
  1. import java.util.*;
  2.   
  3. public class DiffDemo {

  4.    public static void main(String args[]) {
  5.       try {
  6.          long start = System.currentTimeMillis( );
  7.          System.out.println(new Date( ) + "\n");
  8.          Thread.sleep(5*60*10);
  9.          System.out.println(new Date( ) + "\n");
  10.          long end = System.currentTimeMillis( );
  11.          long diff = end - start;
  12.          System.out.println("Difference is : " + diff);
  13.       } catch (Exception e) {
  14.          System.out.println("Got an exception!");
  15.       }
  16.    }
  17. }
复制代码
Calendar类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象

Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象

使用Calendar类代表特定的时间,需要首先创建一个Calendar的对象,然后再设定该对象中的年月日参数来完成。
//创建一个代表2009年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2009, 6 - 1, 12);
Calendar类对象字段类型

Calendar类中用一下这些常量表示不同的意义,jdk内的很多类其实都是采用的这种思想
常量
描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几
Calendar类对象信息的设置
Set设置
如:
Calendar c1 = Calendar.getInstance();
调用:
public final void set(int year,int month,int date)
c1.set(2009, 6 - 1, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12
利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
其他字段属性set的意义以此类推
Add设置
Calendar c1 = Calendar.getInstance();
把c1对象的日期加上10,也就是c1所表的日期的10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1所表的日期的10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
其他字段属性的add的意义以此类推


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
17#
 楼主| 发表于 2017-7-6 14:28:43 | 只看该作者
本帖最后由 java 于 2017-7-6 14:45 编辑

Java 正则表达式
https://www.w3cschool.cn/java/java-regular-expressions.html

java.util.regex包主要包括以下三个类:
  • Pattern类:
    pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Pattern对象,你必须首先调用其公共静态编译方法,它返回一个Pattern对象。该方法接受一个正则表达式作为它的第一个参数。
  • Matcher类:
    Matcher对象是对输入字符串进行解释和匹配操作的引擎。与Pattern类一样,Matcher也没有公共构造方法。你需要调用Pattern对象的matcher方法来获得一个Matcher对象。
  • PatternSyntaxException:
    PatternSyntaxException是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;

  3. public class RegexMatches
  4. {
  5.     public static void main( String args[] ){

  6.       // 按指定模式在字符串查找
  7.       String line = "This order was placed for QT3000! OK?";
  8.       String pattern = "(.*)(\\d+)(.*)";

  9.       // 创建 Pattern 对象
  10.       Pattern r = Pattern.compile(pattern);

  11.       // 现在创建 matcher 对象
  12.       Matcher m = r.matcher(line);
  13.       if (m.find( )) {
  14.          System.out.println("Found value: " + m.group(0) );
  15.          System.out.println("Found value: " + m.group(1) );
  16.          System.out.println("Found value: " + m.group(2) );
  17.       } else {
  18.          System.out.println("NO MATCH");
  19.       }
  20.    }
  21. }
复制代码


正则表达式语法
字符
说明
\
将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,"n"匹配字符"n"。"\n"匹配换行符。序列"\\"匹配"\","\("匹配"("。
^
匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。
$
匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。
*
零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。
+
一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
?
零次或一次匹配前面的字符或子表达式。例如,"do(es)?"匹配"do"或"does"中的"do"。? 等效于 {0,1}。
{n}
n 是非负整数。正好匹配 n 次。例如,"o{2}"与"Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。
{n,}
n 是非负整数。至少匹配 n 次。例如,"o{2,}"不匹配"Bob"中的"o",而匹配"foooood"中的所有 o。"o{1,}"等效于"o+"。"o{0,}"等效于"o*"。
{n,m}
Mn 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,"o{1,3}"匹配"fooooood"中的头三个 o。'o{0,1}' 等效于 'o?'。注意:您不能将空格插入逗号和数字之间。
?
当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。
.
匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。
(pattern)
匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果"匹配"集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用"\("或者"\)"。
(?:pattern)
匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用"or"字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。
(?=pattern)
执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?=95|98|NT|2000)' 匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
(?!pattern)
执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?!95|98|NT|2000)' 匹配"Windows 3.1"中的 "Windows",但不匹配"Windows 2000"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。
x|y
匹配 xy。例如,'z|food' 匹配"z"或"food"。'(z|f)ood' 匹配"zood"或"food"。
[xyz]
字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"。
[^xyz]
反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain"中"p","l","i","n"。
[a-z]
字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。
[^a-z]
反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。
\b
匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"。
\B
非字边界匹配。"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"。
\cx
匹配 x 指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样,则假定 c 就是"c"字符本身。
\d
数字字符匹配。等效于 [0-9]。
\D
非数字字符匹配。等效于 [^0-9]。
\f
换页符匹配。等效于 \x0c 和 \cL。
\n
换行符匹配。等效于 \x0a 和 \cJ。
\r
匹配一个回车符。等效于 \x0d 和 \cM。
\s
匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。
\S
匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。
\t
制表符匹配。与 \x09 和 \cI 等效。
\v
垂直制表符匹配。与 \x0b 和 \cK 等效。
\w
匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
\W
与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。
\xn
匹配 n,此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,"\x41"匹配"A"。"\x041"与"\x04"&"1"等效。允许在正则表达式中使用 ASCII 代码。
\num
匹配 num,此处的 num 是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。
\n
标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。
\nm
标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式,那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获,则 n 是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值 nm,其中 n m 是八进制数字 (0-7)。
\nml
n 是八进制数 (0-3),ml 是八进制数 (0-7) 时,匹配八进制转义码 nml
\un
匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。例如,\u00A9 匹配版权符号 (©)。
Matcher类的方法索引方法
索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配:
序号
方法及说明
1public int start()
返回以前匹配的初始索引。
2public int start(int group)
返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引
3public int end()
返回最后匹配字符之后的偏移量。
4public int end(int group)
返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。
研究方法
研究方法用来检查输入字符串并返回一个布尔值,表示是否找到该模式:
序号
方法及说明
1public boolean lookingAt()
尝试将从区域开头开始的输入序列与该模式匹配。
2public boolean find()
尝试查找与该模式匹配的输入序列的下一个子序列。
3public boolean find(int start)
重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
4public boolean matches()
尝试将整个区域与模式匹配。
替换方法
替换方法是替换输入字符串里文本的方法:
序号
方法及说明
1public Matcher appendReplacement(StringBuffer sb, String replacement)
实现非终端添加和替换步骤。
2public StringBuffer appendTail(StringBuffer sb)
实现终端添加和替换步骤。
3public String replaceAll(String replacement)
替换模式与给定替换字符串相匹配的输入序列的每个子序列。
4public String replaceFirst(String replacement)
替换模式与给定替换字符串匹配的输入序列的第一个子序列。
5public static String quoteReplacement(String s)
返回指定字符串的字面替换字符串。这个方法返回一个字符串,就像传递给Matcher类的appendReplacement 方法一个字面字符串一样工作。
start 和end 方法
下面是一个对单词"cat"出现在输入字符串中出现次数进行计数的例子:
  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;

  3. public class RegexMatches
  4. {
  5.     private static final String REGEX = "\\bcat\\b";
  6.     private static final String INPUT =
  7.                                     "cat cat cat cattie cat";

  8.     public static void main( String args[] ){
  9.        Pattern p = Pattern.compile(REGEX);
  10.        Matcher m = p.matcher(INPUT); // 获取 matcher 对象
  11.        int count = 0;

  12.        while(m.find()) {
  13.          count++;
  14.          System.out.println("Match number "+count);
  15.          System.out.println("start(): "+m.start());
  16.          System.out.println("end(): "+m.end());
  17.       }
  18.    }
  19. }
复制代码
回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
18#
 楼主| 发表于 2017-7-6 15:18:33 | 只看该作者
本帖最后由 java 于 2017-7-6 16:39 编辑

Java 异常处理
https://www.w3cschool.cn/java/java-exceptions.html

throws/throw关键字:
如果一个方法没有捕获一个检查性异常,那么该方法必须使用throws 关键字来声明。throws关键字放在方法签名的尾部。
也可以使用throw关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
下面方法的声明抛出一个RemoteException异常:
  1. import java.io.*;
  2. public class className
  3. {
  4.    public void deposit(double amount) throws RemoteException
  5.    {
  6.       // Method implementation
  7.       throw new RemoteException();
  8.    }
  9.    //Remainder of class definition
  10. }
复制代码

Java 继承
https://www.w3cschool.cn/java/java-inheritance.html
继承中最常使用的两个关键字是extends和implements。

IS-A关系
通过使用关键字extends,子类可以继承父类的除private属性外所有的属性。
我们通过使用instanceof 操作符,能够确定Mammal IS-A Animal

Implements关键字使用在类继承接口的情况下, 这种情况不能使用关键字extends

HAS-A 关系
HAS-A代表类和它的成员之间的从属关系。这有助于代码的重用和减少代码的错误。
  1. public class Vehicle{}
  2. public class Speed{}
  3. public class Van extends Vehicle{
  4.         private Speed sp;
  5. }
复制代码
Van类和Speed类是HAS-A关系(Van有一个Speed),这样就不用将Speed类的全部代码粘贴到Van类中了,并且Speed类也可以重复利用于多个应用程序。
在面向对象特性中,用户不必担心类的内部怎样实现。
Van类将实现的细节对用户隐藏起来,因此,用户只需要知道怎样调用Van类来完成某一功能,而不必知道Van类是自己来做还是调用其他类来做这些工作。
Java只支持单继承,也就是说,一个类不能继承多个类。
Java只支持单继承(继承基本类和抽象类),但是我们可以用接口来实现(多继承接口来实现),脚本结构如:
  1. public class Apple extends Fruit implements Fruit1, Fruit2{}
复制代码
一般我们继承基本类和抽象类用extends关键字,实现接口类的继承用implements关键字。


Java 重写(Override)与重载(Overload)
https://www.w3cschool.cn/java/java-override-overload.html
Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。

区别点
重载方法
重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)


ss
回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
19#
 楼主| 发表于 2017-7-11 09:59:59 | 只看该作者
Java 接口https://www.w3cschool.cn/java/java-interfaces.html

  • 接口不能包含成员变量,除了static和final变量。



接口的实现
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-23 09:28 , Processed in 0.084355 second(s), 16 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表