序:
- 基础类库位于java.lang包内。
- 工具类位于java.util包下。
- 格式化:java.text
- 文件 :java.io
- 网络编程:java.net
- 数据库JDBC:java.sql
一、String类
在用print和println输出对象名时,默认调用了toString ()方法
字符串值不可以变,创建后就在常量池中存在了。要改变只能改变引用地址
(一)String,StringBuffer,StringBuilder区别
1.String不可变字符串类;一般表示一个字符串用String,控制台输入的一定是String类型,其他类型的需要用现有的String类型重新创建;
2.字符串的值更改频繁的,用String效率低,需要不断创建新的对象,那就选择StringBuffer,StringBuilder
3.StringBuffer,StringBuilder
(二)String的常用方法
//创建字符串对象方法之一:直接赋值
String s1 = "hello";
String s4 = "hello";
String s5 = "abc";
String s6 = "ABC";
//创建字符串对象方法之二:
String s2 = new String();
String s3 = new String("hello");
String s7 = new String("xyz");
System.out.println(s1==s3); //false
System.out.println(s1==s4); //true
//String类的一些常用的方法
//concat:字符串连接
System.out.println(s5.concat(s3));
//length:字符串长度
System.out.println(s7.length()); //3
//equalsIgnoreCase:忽略大小写的判断一致性。
System.out.println(s5.equalsIgnoreCase(s6));//true
//toUpperCase转大写
System.out.println("hello".toUpperCase());//HELLO
//toLowerCase:转小写
System.out.println("HELLO".toLowerCase());//hello
//indexOf查找参数字符串在原字符串第一次出现的位置索引indexOf
String sg = "hellohello";
System.out.println(sg.indexOf("he")); //0
//lastIndexOf:查找参数下字符串在原字符串最后一次出现的位置索引
System.out.println(sg.lastIndexOf("he")); //5
//charAt返回字符串中参数位置对应的字符
System.out.println(sg.charAt(1));//3
//substring取子串两种形式之一:起始位置索引一直取到最后
String sg1 = "helloabc";
System.out.println(sg1.substring(5));//abc
//substring:取子串两种形式之二:起始到终止都指定,包括起始不包括终止[)
System.out.println(sg1.substring(2, 4)); //ll
//trim:去掉首尾空格
String sg2 = " h e l l o";
System.out.println(sg2.trim());//h e l l o
//rpalce:替换对象数组中的指定字符串
String sg3 = "hellohelloabc";
System.out.println(sg3.replace("hello", "您好"));
System.out.println(sg2.replace(" ", ""));
//hello,用空格替换空串
//endWith:判断是否以指定的参数串结尾
String sg4 = "Demo.java";
System.out.println(sg4.endsWith("java"));//true 可以过滤所有的java格式的文件
System.out.println(sg4.startsWith("Demo"));//true
//compareTo:按字符的Unicode的编码,比较对象在比较的参数串之前,返回附属,之后返回整数,相等返回0.
String sg5 = "hello";
String sg6 = "xyz";
System.out.println(sg5.compareTo(sg6)); //-16
System.out.println("xxx".compareTo("aaa"));//+23
System.out.println("xxx".compareTo("xxx"));//0
//contain:参数对象是否包含比较对象
System.out.println("hello".contains("haa")); //false
//toCharArray:把字符串转换为字符数组
char [] c = "hello".toCharArray();
System.out.println(Arrays.toString(c));
//split:用特定字符串分割
String [] strs = "aa bb cc dd ee ff".split(" ");//aa换行,bb换行,cc dd ee ff
for(String ss:strs)
System.out.println(ss);
(三)StringBuffer的常用方法
public class testStringBuffer {
public static void main(String[] args) {
StringBuffer sf = new StringBuffer();//空串 16个字符大小的缓冲区
//容量
System.out.println(sf.capacity());//16
sf.append("hello");
System.out.println(sf.capacity());//16
//缩小缓冲数组大小
sf.trimToSize();
System.out.println(sf.capacity());
// 可以自己设置 缓冲数组 容量的大小
StringBuffer sf1 = new StringBuffer(100);
//-----------------方法-------------------------------
System.out.println("--------------------方法----------------------");
StringBuffer sr = new StringBuffer("hello");
sr.append("tom");
System.out.println(sr);//"hellotom";
char [] c = {'a','b','c'};
//(字符数组,起始位置,几个字符)
sr.append(c,1,2);
System.out.println(sr);//hellotombc
//-------------------------------------------------------------
//在指定 的 位置 插入一个字符串
sr.insert(5,"您好" );//"hello您好tombc"
System.out.println(sr);
//修改 某个 位置 的字符
sr.setCharAt(5, '你');//"hello你好tombc"
System.out.println(sr);
//删除 指定位置 的字符
sr.deleteCharAt(5);//"hello好tombc"
System.out.println(sr);
//删除 某一部分字符序列 [起始位置,终止位置)
sr.delete(6, 9);////"hello好bc"
System.out.println(sr);
//字符串反转
sr.reverse();
System.out.println(sr);
String strr = sr.toString();
}
}
String和StringBuffer用时比较:
/**
* String类连接字符串和StringBuffer连接字符串时间比较。
* String大概是130ms;
* StringBuffer大概是1ms.
* @author 马
*
*/
public class test4 {
public static void main(String[] args) {
long start = System.currentTimeMillis();
String s = "";
// StringBuffer sf = new StringBuffer();
for(int i = 0;i<10000;i++) {
s+=i+",";
// sf.append("-");
// sf.append(i);
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
二、基本类型的拆箱,装箱
JDK提供了对所有基本数据类型的包装类 将基本类型的首字母大写便是包装类 除了char—>Character 和int–>Integer
(一)整型类装箱
public class test9 {
public static void main(String[] args) {
//装箱:基本类型--》类类型
int n = 22;
Integer i = new Integer(n);
i = Integer.valueOf(n);
//拆箱:类类型还原为基本数据类型
n = i.intValue();//把对象中的值取出来
//-----------------------
//自动装箱
n=i; //系统自动进行了n = i.intValue()
//自动拆箱
i=n; //系统自动进行了i = Integer.valueOf()
//包装类属于不可变类,不可更改值。像String类一样
//除了Float 和Double没有缓存,Integer有缓冲池的范围为:-128~127,超出部分不在缓冲池里,需创建对象
Integer i1 = 22;
Integer i2 = 22;
Integer i3 = new Integer(22);
Integer i4 = 222;
Integer i5 = 222;
//Integer有两个构造方法,一个是赋值int
//一个是赋值字符串String,里面写了int,注意,写别的字符编译通不过
Integer i8 = new Integer("4567");
System.out.println(i8);
System.out.println(i1==i2);//true
System.out.println(i1==i3);//false
System.out.println(i4==i5);//false超出了-128~127后,在堆里创建了对象
//功能:字符转换
//将字符串转换成整数,这里字符串里只能是数字,如果有其他字符,则转换不成功
String s = "123";
int num ;
num= Integer.parseInt(s); //parse___转换成某类型
num = Integer.valueOf(s);
num = new Integer(s).intValue();
System.out.println("----字符串转数字------"+num);
//数字转换成字符串
s = num+"";
s = Integer.toString(num);
s = String.valueOf(num);
//进制转换
System.out.println(Integer.toBinaryString(5));//101
System.out.println(Integer.toOctalString(17));
System.out.println(Integer.toHexString(12));
System.out.println(Integer.valueOf("101", 2));
System.out.println(Integer.valueOf("21", 8));
System.out.println(Integer.valueOf("f", 16));
//取值范围查询
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
}
}
(二) 字符串包装类的应用
/**
* 判断一串字符串里的字母数,数字数,空格数
* @author 马
*
*/
public class javaTest2 {
public static void main(String[] args) {
//字符串
String s = "hello222 . .";
char [] cr = s.toCharArray();
//英文字母,数字,空格
int count1 ,count2 ,count3;
count1 = count2 = count3 = 0;
for(int i = 0;i < cr.length; i++) {
/* if(cr[i] >= 'a' && cr[i]<='z' || cr[i] >= 'A' && cr[i] <= 'Z') {
count1 ++;
}else if(cr[i] >= '0' && cr[i] <= '9') {
count2 ++;
}else if(cr[i] == ' ') {
count3 ++;
}*/
if(Character.isUpperCase(cr[i]) || Character.isLowerCase(cr[i])) {
count1 ++;
}else if(Character.isDigit(cr[i])) {
count2++;
}else if(Character.isWhitespace(cr[i])) {
count3++;
}
}
System.out.println(count1+","+count2+","+count3);
}
}
三、日期Date和时间和Calender
- (一)获得日期和时间
- (一)日期时间的格式化
- 抽象类只能用getInstance方法来获得对象
- 1.gettime是获得毫秒值(1970年到现在的);
- (二)数字格式化
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Random;
import java.sql.Date;
import java.sql.Time;
/**
* 日期和时间类的使用
*
* @author 马
*
*/
public class DataTest {
public static void main(String[] args) {
// -----------------父类java.util类中的--------------------
System.out.println("一、-------父类java.util中的日期和时间方法-------");
java.util.Date date = new java.util.Date();
System.out.println(date);// Sun Jun 03 13:29:20 CST 2018
System.out.println("1.都是静态方法,获得的是当前的年月日时分秒。");
System.out.println(date.getTime());// 1528003875304
System.out.println("2.getTime获得是从1970年1月1日0时0分到现在的总的毫秒值");
System.out.println(System.currentTimeMillis());// 1528004024427
System.out.println("3.System.currentTimeMillis()获得的也是当前毫秒值");
java.util.Date date1 = new java.util.Date(1528004024427L);
System.out.println(date1);
// -----------------子类-------java.sql中--------------------
System.out.println();
System.out.println("二、-------子类java.sql------------");
Date d1 = new Date(date.getTime());// 获得当前time中的date信息
System.out.println(d1);// 2018-06-03
String sd1 = d1.toString();// 将日期转成字符串
System.out.println(sd1);// 2018-06-03
d1 = Date.valueOf(sd1);
System.out.println(d1);// 2018-06-03
Date d2 = new Date(System.currentTimeMillis()); // 可直接从当前毫秒中获得
System.out.println(d2);// 2018-06-03
Time t1 = new Time(date.getTime());// 获得当前全time中的现在的时间信息,不含日期。
System.out.println(t1);// 13:51:32
Timestamp tp1 = new Timestamp(date.getTime());// 从父类对象date中获得时间戳
System.out.println(tp1);// 2018-06-03 13:53:40.843
// --------------格式化------------------
System.out.println();
System.out.println("三、------------格式化-------------");
System.out.println("1.引言,数字格式化----");
NumberFormat nf1 = NumberFormat.getInstance();// 当前缺省的数字格式:小数点后三位
System.out.println(nf1.format(12.23456));// 12.235
nf1 = NumberFormat.getCurrencyInstance();// 单签缺省的货币格式
System.out.println(nf1.format(234.456));// ¥234.46
System.out.println("2.NumberFormat的子类DecimalFormat");
DecimalFormat df1 = new DecimalFormat("00.0000");
System.out.println(df1.format(123.34567));
nf1 = NumberFormat.getNumberInstance();// 每三位加逗号,小数部分保留三位
System.out.println(nf1.format(2679868734.4579880786));// 2,679,868,734.458
/*
* 格式的意思: 常用:用全0规定前后保留的位数。 1.全是0的话就是规定了整数部分和小数部分最少多少位,少于格式的话前后补0,
* 多的话整数部分以实际数字为准,小数部分后面四舍五入; 2.格式里整数部分有非零的话,格式化后加在原数字前面;
* 3.格式里小数部分有非零的化,格式化后用格式化的小数替换;
*/
System.out.println("3.日期格式化----");
DateFormat f1 = DateFormat.getInstance();// 默认的日期加时间格式化
System.out.println(f1.format(date));// 18-6-3 下午2:26
f1 = DateFormat.getDateInstance(); // 默认的日期格式化
System.out.println(f1.format(date));// 2018-6-3
f1 = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(f1.format(date));// 18-6-3
f1 = DateFormat.getDateInstance(DateFormat.LONG);// 日期的长型表达格式化
System.out.println(f1.format(date));// 2018年6月3日
f1 = DateFormat.getDateInstance(DateFormat.FULL);// 日期的完整表达格式化
System.out.println(f1.format(date));// 2018年6月3日 星期日
/*
* 要格式化的样子由你新建的DateFormat的Instance类型决定。
* 要格式化成什么样子,先新建一个DateFormat类型的多态对象, 对象内容有无参数及参数形式决定了格式化的形式
*/
System.out.println("4.时间格式化");
f1 = DateFormat.getTimeInstance(); // 默认时间格式化
System.out.println(f1.format(date));// 14:41:15
System.out.println("5.日期时间格式化");
f1 = DateFormat.getDateTimeInstance();
System.out.println(f1.format(date));// 2018-6-3 16:25:51
f1 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
System.out.println(f1.format(date));// 2018年6月3日 星期日 下午04时28分22秒 CST
// --------------------------jdk8.0----------------
// --------------------java.time-------------------
// 日期
System.out.println();
System.out.println("四、JDK8.0后用法");
LocalDate ldate = LocalDate.now();
System.out.println(ldate); // 2018-06-03
LocalDate ldate1 = LocalDate.of(2012, 3, 3);
LocalDate ltime = LocalDate.now();
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);// 2018-06-03T16:31:45.896
System.out.println(ldt.getYear());// 2018
System.out.println(ldt.getHour());// 16
System.out.println(ldt.plusDays(10));// 2018-06-13T16:31:45.896
System.out.println(ldt.minusDays(2));// 2018-06-01T16:31:45.896
LocalDateTime ldt1 = LocalDateTime.now();
LocalDateTime ldt2 = LocalDateTime.of(2012, 2, 3, 5, 3, 56);
Duration d = Duration.between(ldt1, ldt2);
System.out.println(d); // PT-55499H-27M-49.896S
}
}
四、Math类(位于java.lang包下)中的常用方法
- (一)double random();//产生0到1之间的随机数
- (1)用法:产生任意范围最小值到最大值之间的随机数: int 随机整数: (int)(Math.random()*(最大值-最小值+1)) (lang包无需导包,radom()方法静态方法,类名直接用)
- (2)另外产生随机数还可以用java.util包下的Random类下的nextInt()和nextDouble()方法。这种方法可以产生各种类型的随机数,整型,浮点,及带范围的整型和浮点。//java.util包需要导入
- (3)Math.Radom()方法是Random类的方法之一:产生随机浮点数:
PS:Random类用法示例
Random r = new Random();
int n1 = r.nextInt(n);//可以带参,建议带参,产生0到n-1之间的随机整数
System.out.println(n1);
double n2 = r.nextDouble();//不能带参,产生[0,1)之间的随机数
System.out.println(n2);
(二)double cell(double d) ://cell天花板:获取大于等于d的最小整数的double 类型的值。
(三)double flour(double d)://flour 地板。获取小于等于d的最大这个你输的double 类型的值。
(四)long round(double d) ://四舍五入至long类型的数
五、Class类大写的C
通过该方法可以获得某类的字节码信息,从而可以调用一个类中的所有信息。
对象.getClass().对象的任意方法。
在反射章会详细介绍。
六、Object类:所有类最终的父类。
含有的常用的方法
- 1.equals()//不过平时输出时都调用的是String类重写后的。
- 2.finalize() 垃圾回收 之前调用
- 3.System.gc();强制垃圾回收
- 4.toString() 对象的字符串描述信息
注意: 在使用print() 或 pintln()输出对象名时,会自动调用toString()方法;