快捷键的设置
eclipse视图管理与程序调试:
debug 调试
设置单个过程的javac
快捷键
alt+/
ctrl+shift+/
ctrl+1
模版创建...edit
工程导入
静态导入:import static
可以导入那个方法:import java.lang.Math.max;调用数学Math.max时,可以不用Math
可变参数:
public class VarablePargrame {
public static void main(String[] args) {
System.out.println(add(1,2));
System.out.println(add(1,2,5,8));
}
public static int add(int x,int ... arg){
int sum=x;
for(int i=0;i<arg.length;i++){
sum+=arg[i];
}
return sum;
}
}
增强for循环:
public class VarablePargrame {
public static void main(String[] args) {
System.out.println(add(1,2));
System.out.println(add(1,2,5,8));
}
public static int add(int x,int ... args){
int sum=x;
/*for(int i=0;i<arg.length;i++){
sum+=args[i];
}*/
for(int arg:args){
sum+=arg;
}
return sum;
}
}
自动装箱与拆箱
享源模式
枚举
public class EnumTest{
public static void main (String args[]){
WeekDay1 weekDay=WeekDay1.MON;
System.out.println(weekDay.nextDay());
}
}
public class WeekDay {
public final static WeekDay SUN=new WeekDay();
public final static WeekDay MON=new WeekDay();
public WeekDay nextDay(){
if(this==SUN){
return MON;
}
else{
return SUN;
}
}
public String toString(){
return this==SUN?"SUN":"MON";
}
}
public abstract class WeekDay1 {
private WeekDay1(){}
public final static WeekDay1 SUN=new WeekDay1(){
@Override
public WeekDay1 nextDay(){
return MON;
}
};
public final static WeekDay1 MON=new WeekDay1(){
@Override
public WeekDay1 nextDay(){
return SUN;
}
};
public abstract WeekDay1 nextDay();
public String toString(){
return this==SUN?"SUN":"MON";
}
}
public class WeekDayEnum {
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);
System.out.println(WeekDay.valueOf("SUN"));
System.out.println(WeekDay.valueOf("SUN").toString());
System.out.println(WeekDay.values().length);
}
public enum WeekDay{
SUN(1),MON,TUE,WED,THI,FRI,SAR;
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("Second");}
}
public enum TrafficLamp{
REG(50){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(33){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(12){
public TrafficLamp nextLamp(){
return REG;
}
};
public abstract TrafficLamp nextLamp();
private TrafficLamp(){}
public int time;
private TrafficLamp(int time){this.time=time;}
}
}
反射
Constructor类
//new String(new StringBuffer=("abc"))
Constructor construtor1=String.class.getConstructor(StringBuffer.class);
String str2=(String)constructor1.newInstance(new StringBuffer("abc"));
System.out.println(str2.charAt(2));
field类
Method类
用反射执行某个类中的main方法
数组的反射
public class ReflactPoint {
public int x;
public int y;
public String str1="ball";
public String str2="basetball";
public String str3="itcast";
public ReflactPoint(int x,int y){
super();
this.x=x;
this.y=y;
}
@Override
public String toString(){
return str1+";"+str2+";+str3";
}
}
public class RefacTest {
public static void main(String[] args) throws Exception{
String str1="abc";
Class cls1=str1.getClass();
Class cls2=String.class;
Class cls3=Class.forName("java.lang.String");
System.out.println(cls1==cls2);
System.out.println(cls1==cls3);
System.out.println(cls1.isPrimitive());
System.out.println(int.class.isPrimitive());
System.out.println(int.class==Integer.class);
System.out.println(int.class==Integer.TYPE);
System.out.println(int[].class.isPrimitive());
System.out.println(int[].class.isArray());
//new String(new StringBuffer=("abc"))
Constructor constructor1=String.class.getConstructor(StringBuffer.class);
String str2=(String)constructor1.newInstance(new StringBuffer("abc"));
System.out.println(str2.charAt(2));
ReflactPoint rp=new ReflactPoint(1,5);
Field fieldY=rp.getClass().getField("y");
System.out.println(fieldY.get(rp));//fieldY不是对象上的变量,而是类上的
/*Field fieldX=rp.getClass().getField("x");
System.out.println(fieldX.get(rp));//fieldY不是对象上的变量,而是类上的
*/
Field fieldX=rp.getClass().getDeclaredField("x");
fieldX.setAccessible(true);
System.out.println(rp);//暴力反射
changeStringValue(rp);
System.out.println(rp);
Method methodCharAt=String.class.getMethod("charAt", int.class);
System.out.println(methodCharAt.invoke(str1,1));//如果str1是null,那么method对应的方法就应该是static方法
System.out.println(methodCharAt.invoke(str1, new Object[]{2}));//jdk1.4
String startingClassName=args[0];
Method mainMethod=Class.forName(startingClassName).getMethod("main",String[].class);
// mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
int[] a1=new int[]{1,2,3};
int[] a2=new int[3];
int[][] a3=new int[3][4];
String[] a4=new String[]{"a","b","c"};
System.out.println(a1.getClass()==a2.getClass());
System.out.println(a1.getClass()==a4.getClass());
System.out.println(a1.getClass()==a3.getClass());
System.out.println(a1.getClass().getName());
System.out.println(a1.getClass().getSuperclass().getName());
System.out.println(a4.getClass().getSuperclass().getName());
Object aobject1=a1;
Object aobject2=a4;
//Object[] aobject3=a1;
Object[] aobject4=a3;
Object[] aobject5=a4;
System.out.println(Arrays.asList(a1));
System.out.println(Arrays.asList(a4));
printObject(a4);
printObject("xyz");
}
private static void printObject(Object obj) {
Class clazz=obj.getClass();
if(clazz.isArray()){
int len=Array.getLength(obj);
for(int i=0;i<len;i++){
System.out.println(Array.get(obj, 1));}
}else{
System.out.println(obj);
}
}
private static void changeStringValue(Object obj)throws Exception {
Field[] fields=obj.getClass().getFields();
for(Field field:fields){
if(field.getType()==String.class){//这里不能用equals,因为是同一份字节吗
String oldValue=(String)field.get(obj);
String newValue=oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
}
class TestArguments{
public static void main(String[] args){
for(String arg:args){
System.out.println(arg);
}
}
ArrayList有序的数组
HashSet覆盖,要把原来的给remove掉
hashCode方法与HashSet类
反射的作用-实现框架的功能
InputStream ips=new FileInputStream("config.properties");
Properties props=new Properties();
props.load(ips);
ips.close();
String className=props.getProperty("className");
InputStream ips=ReflectTest2.class.getClassLoader().getResourceAsStream("cn/itcase/day1/config.properties");
InputStram ips=ReflectTest2.class.getResourceAsStream("config.properties");