java常用API:
StringBuffer:
1. StringBuffer和String的区别: http://blog.youkuaiyun.com/rmn190/article/details/1492013
2. 常用方法: 构造: StringBuffer();StringBuffer(CharSequence seq);
StringBuffer(String str);至于CharSequence和String还不是很懂,后面在看看
其他:append();reverse();replaceAll();insert()
Runtime:使用静态方法:getRuntime()实例化
常用方法:gc();tatalMemory();maxMemory();freeMemory();
进程销毁:destroy();exec()
System:gc(),等同于runtime的gc()进行垃圾回收;
finalize(),对象被回收之前调用的方法;
Math:round(),random()以及其他的一些数学操作方法;
BigInteger:大整数操作类
BigDecimal:大小数操作类
Date:日期操作类new Date();
Calendar:采用手工的方式取得日期,可以通过此类精确到毫秒
Calendar.MONTH;Calendar.DATE; Calendar.HOUR_OF_DAY; Calendar Calendar.MINUTE; Calendar.SECOND; Calendar.MILLISECOND
SimpleDateFormat:
代码一:
import java.text.SimpleDateFormat;
import java.util.Date;
public class test5 {
public static void main(String[] args)throws Exception {
String str = "2009-12-24 11:51:57.500";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = sdf.parse(str);
System.out.println("格式化后的日期:"+date);
}
}
代码二:
import java.text.SimpleDateFormat;
import java.util.Date;
public class test6 {
public static void main(String[] args) throws Exception {
String oldDate = "2009-12-24 11:51:57.500";
String newDate = null;
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒");
Date date = sdf1.parse(oldDate);
System.out.println("格式化前的日期: "+ date);
newDate = sdf2.format(date);
System.out.println("格式化后的日期: "+ newDate);
}
}
注意就是下面两个函数: StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) ;
Date parse(String text, ParsePosition pos);
Arrays:sort()对数组排序;fill()对数组内容进行填充
comparable接口:
import java.security.Permissions;
import java.util.Arrays;
class Person implements Comparable<Person> {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "姓名: " + this.name + ",年龄: " +this.age;
}
@Override
public int compareTo(Person o) {
if (this.age > o.age) {
return 1;
} else if (this.age < o.age) {
return -1;
} else {
return 0;
}
}
}
public class test7 {
public static void main(String[] args) {
Person per[] = { new Person("张三", 20), new Person("李四", 19),
new Person("王五", 23) };
Arrays.sort(per);
for (int x = 0; x < per.length; x++) {
System.out.println(per[x]);
}
}
}
Pattern类:
代码一:
import java.util.regex.Pattern;
public class test8 {
public static void main(String[] args) {
String str = "asd234fasdfdfdd23423423asdf";
Pattern pat = Pattern.compile("\\d+");
String s[] = pat.split(str);
for (int x = 0; x < s.length; x++) {
System.out.println(s[x]);
}
}
}
代码二:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test9 {
public static void main(String[] args) {
String str = "11-234-45";
Pattern pat = Pattern.compile("\\d{2}-\\d{3}-\\d{2}");//定义模式
Matcher mat = pat.matcher(str);//整个内容和模式匹配
if(mat.matches()){
System.out.println("验证通过,内容和模式匹配");
}
}
}
代码三:字符串的替换
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test10 {
public static void main(String[] args) {
String str = "aad2424fas626df23432sdfa2d22s2asdff";
Pattern pat = Pattern.compile("\\d+");
Matcher mat=pat.matcher(str);
System.out.println(mat.replaceAll("A"));//把连续的数字替换成A
}
}
String类和正则的结合:
代码一:
public class test11 {
public static void main(String[] args) {
String email = "aa@aa.com";
if(email.matches("\\w+@\\w+\\.\\w+")){
System.out.println("验证通过");
}
}
}
代码二:
public class test12 {
public static void main(String[] args) {
String ip = "192.168.1.2";
String s[] = ip.split("\\.");
for(int x=0;x<s.length;x++){
System.out.println(s[x]);
}
}
}
java网络编程:
代码一:
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class test13 {
public static void main(String[] args) throws Exception{
ServerSocket server = new ServerSocket(9999);//在9999端口监听
System.out.println(" 等待客户端的连接");
Socket client = server.accept();//ServerSocket的accept()返回一个Socket对象
//执行到这里就进行等待
PrintStream out = new PrintStream(client.getOutputStream());//PrintStream传入outputstream的对象实例化
out.print("hello world");
out.close();
client.close();
server.close();
}
}
对应网络编程可以分为客户端开发和服务器,还可以加入多线程.先暂时这样哈.
java1.5新特性:
1、可以静态导入,例:import static java.long.Math.*;
2、可变参数,例如:
Package cn.itcast.day1;
public class varableParameter {
public static void main(String[] args) {
System.out.println(add(1,2,3,4,5));
}
public static int add(int x,int ... args){
int sum=x;
for(int i=0;i<args.length;i++){
sum+=args[i];
}
return sum;
}
}
3、for循环加强,for(type 变量名: 集合变量名){……} 例如:
ps:集合变量可以是数组或是实现了Iterable接口的集合类
4、自动装箱与拆箱
享元模式:很多很小的对象有很多相同的元素那么可以定义为一个对象,不同的元素当做外部属性做为方法的参数传入
5、枚举:定义变量时,变量不能取规定范围以外的值
package cn.itcast.day1;
//枚举测试
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay=WeekDay.MON;
System.out.println(weekDay.nextDay());
}
}
abstract class WeekDay {
private WeekDay(){}
public final static WeekDay SUN=new WeekDay(){
public WeekDay nextDay() {
return MON;
}};
public final static WeekDay MON=new WeekDay(){
public WeekDay nextDay() {
return SUN;
}};
public abstract WeekDay nextDay();
/*public WeekDay nextDay(){ //以上代码用使用抽象方法定义nextDay将大量的if…else语句转移成一个个独立的类
if(this==SUN){
return MON;
}
else{
return SUN;
}
}*/
public String toString(){
return this==SUN?"SUN":"MON";
}
}
枚举的基本应用:
package cn.itcast.day1;
public class EnumTest1 {
public static void main(String[] args) {
WeekDay weekDay=WeekDay.FRI;
System.out.println(weekDay);
System.out.println(weekDay.name());
System.out.println(weekDay.ordinal());
System.out.println(weekDay.valueOf("SUN").toString());
System.out.println(weekDay.values().length);//weekDay.values()是一个数组
}
public enum WeekDay{
SUN,MON,TUE,WEN,THI,FRI,SAT
}
}
带构造方法的枚举:
public enum WeekDay{
SUN(1),MON,TUE,WEN,THI,FRI,SAT;//所有代码都必须放在列表之后
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
带抽象类的复杂枚举:
public enum TrafficLamp{
RED(30){
public cn.itcast.day1.EnumTest1.TrafficLamp TrafficLamp() {
return GREEN;
}
},GREEN(45){
public cn.itcast.day1.EnumTest1.TrafficLamp TrafficLamp() {
return YELLOW;
}
},YELLOW(5){
public cn.itcast.day1.EnumTest1.TrafficLamp TrafficLamp() {
return RED;
}
};
public abstract TrafficLamp TrafficLamp();
private int time;
private TrafficLamp(int time){this.time=time;};
}
6、 泛型:最大的特点是类中的属性类型由外部决定
构造方法中使用泛型; 泛型的擦除;泛型的通配符;
class Point<T>{
private T x;
private T y;
public Point() {
}
public Point(T x, T y) {
super();
this.x = x;
this.y = y;
}
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
public T getY() {
return y;
}
public void setY(T y) {
this.y = y;
}
}
public class test16 {
public static void main(String[] args) {
Point<Object> p1 = new Point<Object>();
Point<Integer> p2 = new Point<Integer>();
//p1=p2//不能相互转换
fun(p1);
fun(p2);
}
public static void fun(Point<?> po){
//po.setX("hello");//不能设值
System.out.println(po.getX());
System.out.println(po.getY());
}
}
泛型的上限<? extends 类>;泛型的下限<? super 类>;
泛型接口
代码一:
interface Demo<T>{
public void print(T param);
}
class DemoImpl1<T> implements Demo<T>{
public void print(T param){
System.out.println("param: "+ param);
}
}
public class test1 {
public static void main(String[] args) {
Demo<String> demo = new DemoImpl1<String>();
demo.print("hello");
}
}
代码二:
interface Demo<T>{
public void print(T param);
}
class Demoimpl2 implements Demo<Demoimpl2>{
public void print(Demoimpl2 param){
System.out.println("param :"+param);
}
public String toString(){
return "helloworld";
}
}
public class test2 {
public static void main(String[] args) {
Demo<Demoimpl2> demo = new Demoimpl2();
demo.print(new Demoimpl2());
}
}
泛型方法;泛型的嵌套设置;先不贴代码了;
7、注解:直接贴代码是最好的
package cn.itcast.day2;
@ItcastAnnotation(color="red",value="123",arrayAttr={1,2,3})
public class AnnotationTest {
@SuppressWarnings("deprecation")
@ItcastAnnotation("xxx")
public static void main(String[] args) {
System.runFinalizersOnExit(true);
if(ItcastAnnotation .class.isAnnotationPresent(ItcastAnnotation.class)){
ItcastAnnotation annotation=ItcastAnnotation .class.getAnnotation(ItcastAnnotation .class);
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
}
}
@Deprecated
public static void sayHello(){
System.out.println("hi,传智播客");
}
}
package cn.itcast.day2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)//元注解:注解的注解;同理:元信息,元数据类似
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
String color() default "bule";
String value();
int[] arrayAttr() default {3,4,5};
}
其他知识点:
反射:
package cn.itcast.day1;
import java.lang.reflect.*;
public class ReflectTest {
public static void main(String[] args) throws Exception {
String startingClassName=args[0];//Main方法接收的字符串对象(另一个类的类名)
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class);//获得另一个类的mian方法
mainMethod.invoke(null,new Object[]{new String[]{"11","22","33"}});/*创建另一个类的参数为Object[]{new String[]{"11","22","33"}}的静态的main方法,这里的new String[]{"11","22","33"}会被拆开解释为三个字符串对象,使用Object[]{}包含后被拆开解释为一个数组对象。替换为mainMethod.invoke(null,(Object)new String[]{"11","22","33"});也可以实现*/
}
}
class TestArguments{
public static void main(String [] args){
for(String arg:args){
System.out.println(arg);
}
}
}
类加载器: