一、StringBuffer:
-------------------------StringBuffer、StringBuilder-----------------------------
StringBuffer是字符串缓冲区。
特点:
1、是一个容器。而且长度是可变化的。
2、可以操作多个数据类型。
3、最终会通过toString方法变成字符串。
CURD:增删改查
即:create,update,read,delete
1、存储:
StringBuffer append(); 将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(int index,数据); 可以将数据插入到指定的index位置。
2、删除:
StringBuffer delete(int start,int end); 删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(int index); 删除指定位置的字符。
3、获取:
Char charAt(int index);
int indexOf(String str);
int lastIndexOf(String str);
int length();
String substring(int start,int end); 包含start,不包含end
4、修改:
StringBuffer replace(int start,int end,String str); 包含start,不包含end
setCharAt(int index,char ch);
5、反转:
StringBuffer reverse();
6、将缓冲区中指定数据存储到指定数组中:
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin);
在JDK1.5版本之后出现了StringBuilder。功能与StringBuffer相同。
StringBuffer是线程同步。线程是安全的,但是每次都需要访问锁,效率较低。
StringBuilder是线程不同步。线程是不安全的,不需要访问锁,效率高。用于多线程不安全。
所以如果需要多线程同步,建议使用StringBuffer,而不需要同步的使用StringBuilder。
以后开发,建议使用StringBuilder。
Java升级的三个因素:
1、提高效率;
2、简化书写;
3、提高安全性。
代码:
public class TestStringBuffer {
public static void main(String[] args) {
String s = "123456789";
StringBuffer sb1 = new StringBuffer(s);
StringBuffer sb2 = new StringBuffer();
System.out.println(sb2);
sb2.append("Good morning,I am studying java.");//尾部追加
System.out.println(sb2);
sb2.insert(sb2.indexOf("I am"), "everyone.");//指定位置插入字符串
System.out.println(sb2);
int start = sb2.indexOf("everyone");
int end = start + "everyone".length();
sb2.replace(start, end, "everybody");
System.out.println(sb2);
System.out.println("sb1:" + sb1);
sb1.reverse();
System.out.println("sb1 逆序:" + sb1);
}
}
---------------------------基本数据类型对象包装类----------------------------------
基本数据类型 引用数据类型
byte Byte
int Integer
short Short
long Long
boolean Boolean
float Float
double Double
char Character
基本数据类型对象包装类的最常见作用:
用于基本数据类型和字符串类型之间做转换。
基本数据类型转换成字符串:
基本数据类型 + "";
基本数据类型.toString(基本数据类型值);
eg:Integer.toString(34); //将34整数变成"34";
字符串转换成基本数据类型:
第一种方法:(静态调用方式)
xxx是基本数据类型;
xxx a = Xxx.parseXxx(String);
eg:Integer.parseInt("123");
//将字符串"123"变成整数123;必须传入数字类型的字符串,否则出现异常
eg:Long.parseLong("123");
boolean b = Boolean.parseBoolean("true");
第二种方法:(非静态,对象调用方式)
Integer i = new Integer("123");
int num = i.intValue();
十进制转成其他进制:
toBinaryString();
toHexString();
toOctalString();
其他进制转成十进制:
parseInt(String,radix);
eg:radix进行等级,如2,8,10,16
代码:
public class Test {
public static void main(String[] args) {
String s = "100";
byte b1 = 120;
Byte b2 = b1;
Byte b3 = new Byte(b1);
byte b4 = b3.parseByte(s); //字符串转成字节
String s1 = b3.toString();
byte a = 3;
Byte b = new Byte(a);//byte-> Byte封装类
a = Byte.valueOf(b);//Byte封装类 -> byte 基本类型
int i1 = Integer.parseInt(s);
float f = Float.parseFloat(s);
double d = Double.parseDouble(s);
boolean bo1 = Boolean.parseBoolean(s);
System.out.println(bo1);//false
boolean bo2 = Boolean.parseBoolean("true");
System.out.println(bo2);//true
}
}
三、date
package otherClass;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);//打印的时间看不懂,希望有格式
//将模式封装到SimpleDateFormat对象中
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss");
//调用format方法让模式格式化指定Date对象
String time = sdf.format(date);
System.out.println("time = " + time);
}
}
四、Calender
package otherClass;
import java.text.SimpleDateFormat;
import java.time.Year;
import java.util.Calendar;
import java.util.Date;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
sop(calendar);
sop(calendar.get(Calendar.YEAR) + "年" + (calendar.get(Calendar.MONTH)+1) + "月"
+ calendar.get(Calendar.DAY_OF_MONTH) + "日 "
+ "星期" + calendar.get(Calendar.DAY_OF_WEEK));
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int index = calendar.get(Calendar.DAY_OF_WEEK);
sop(weeks[index]);
/*
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String year = sdf.format(date);
System.out.println(year);
*/
}
public static void sop(Object o) {
System.out.println(o);
}
}
package otherClass;
import java.util.Calendar;
/*
* 课后练习:
* 1、获取任意年的二月份有多少天
* 思路:
* 根据指定年设置一个时间就是:c.set(year,2,1)//某年的3月1日
* c.add(Calender.DAY-OF_MONTH,-1)//3月1日往前推一天,就是2月的最后一天
* 2、获取昨天的现在这个时刻。
* c.add(Calendar.DAY_OF_MONTH,-1);
*/
public class CalendarDemo2 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2012,3,20);
printCalendar(calendar);
calendar.add(Calendar.MONTH, 3);
printCalendar(calendar);//对时间量的偏移
}
public static void printCalendar(Calendar c){
sop(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH)+1) + "月"
+ c.get(Calendar.DAY_OF_MONTH) + "日 "
+ "星期" + c.get(Calendar.DAY_OF_WEEK));
String[] weeks = {"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int index = c.get(Calendar.DAY_OF_WEEK);
sop(weeks[index]);
}
public static void sop(Object o) {
System.out.println(o);
}
}
五、Math
package otherClass;
import java.util.Random;
/*
* 课后练习:
* 给定一个小数,保留该小数的后两位
*/
public class MathDemo {
public static void main(String[] args) {
Random random = new Random();
for(int x = 0; x < 10; x++){
//int d = (int)(Math.random()*10 + 1);
int d = random.nextInt(10+1);
sop(d);
}
}
public static void show(){
double d = Math.ceil(16.34);//返回大于指定数据的最小整数。
double d1 = Math.ceil(-16.54);
sop(d);
sop(d1);
double d2 = Math.floor(16.34);//返回小于指定数据的最小整数。
double d3 = Math.floor(-16.54);
sop(d2);
sop(d3);
double d4 = Math.round(16.54);//四舍五入。
double d5 = Math.round(-16.34);
sop(d4);
sop(d5);
double d6 = Math.pow(2,3);//幂运算2的3次方。
double d7 = Math.pow(3,3);
sop(d6);
sop(d7);
}
public static void sop(Object o){
System.out.println(o);
}
}
六、Runtime
package otherClass;
/*
Runtime对象:
该类并没有提供构造函数。说明不可以new对象。那么会直接想到该类中的方法都是静态的。
但是发现该类中还有非静态方法。说明该类肯定会提供方法获取本类对象。而且该方法是
静态的。并返回值类型是本类类型。(单例设计模式)
该方法是static getRuntime();
有这个特点可以看出该类使用了单例设计模式完成。
*/
public class RuntimeDemo {
public static void main(String[] args) throws Exception{//会产生异常
Runtime r = Runtime.getRuntime();
Process p = r.exec("D:\\Program Files (x86)\\Tencent\\QQ\\QQProtect\\Bin\\QQProtect.exe");//返回一个子进程
Thread.sleep(400);
p.destroy();//结束子线程
}
}
七、System
package otherClass;
import java.util.Properties;
/*
System:类中的方法和属性都是静态的。
out:标准输出,默认是控制台
in:标准输入,默认是键盘
描述系统一些信息:
获取系统属性信息:Properties gerProperties();
*/
public class SysteDemo {
public static void main(String[] args) {
Properties prop = System.getProperties();
//因为Properties是Hashtable的子类,也就是Map集合的一个子类对象。
//那么可以通过map的方法取出该集合中的元素。
//该集合中存储都是字符串,没有泛型定义
//如何在系统中自定义一些特有的信息呢?
System.setProperty("mykey","myvalue");
//获取指定属性信息
String value = System.getProperty("os.name");
System.out.println("value = " + value);
//可不可以在虚拟机启动时动态的加载一些属性信息
String v = System.getProperty("haha");
System.out.println("v = " + v);
/*获取所有属性信息
for(Object obj : prop.keySet()){
String value = (String)prop.get(obj);
System.out.println(obj + "::" + value);
}
*/
}
}