0
点赞
收藏
分享

微信扫一扫

java i/o黑马程序员学习笔记(2)

(方立勋)


1.可变参数与overload与override的区别(   解释:重载与重写的区别 )

可变参数的特点:只能出现在参数列表的最后


...位于变量类型和变量名之间,前后有无空格都可以;


调用可变参数的方法是,编译器为该可变参数隐含创建一个数组,在方法体中


以数组的形式访问可变参数


    一下复制一行


重写,如果父类用private来修饰,而子类写和父类同名的函数,则不叫重写


package itcast.com;

public class VarableParameter {



/*

*可变参数指的就是,参数数量不加以限制。后面的数组代表存储参数的数组!

* /

public static void main(String[] args) {

System.out.println(VarableParameter.add(1,1,1,1,10, 5));



}

//可变参数,只能在参数的最后,后面不能再有了

public static int add(int x,int... args){

int sum=x;

for(x=0;x<args.length;x++){

//输出数组中的数据

System.out.print(args[x]+" ");

//在方法体中当数组的形式来用

sum+=args[x];

}

System.out.println();

return sum;

}

}


eg:


做到这里有一个疑问,就是x代表什么意思,我要输出数组里面的数据,到时总是输出不了全部(我自己理解的),?


上了黑马论坛问了一下得到了完美的答案!


答案入下:


  int x 是输入的第一个参数,而后面的是可变参数,都存储到了数组里面,所以后面的累加,sum 初始化为x就


              不奇怪了,因为累加要加上x。


              里面也可以不写x,那就是只累加数组里面的内容(当然sum初始要为0)




2。增强for循环


for(type 变量名:集合变量名){.......}


注意事项:


爬坡/ 正斜杠,下坡/反斜杠


迭代变量必须在()中定义


集合变量可以是数组或实现了,iterable接口的集合类


上面的例子改成了增强for循环来写


for(int arg:args){

sum+=arg;

System.out.println(arg);

}


 答案正确


3.基本数据类型的装箱与拆箱


1.重构的好处,调用处会自动改




Integet iObj=3;                //装箱


System.out.println(iObj+2); //拆箱




手工调用:



一个字节之内 =128~127


享元模式:flyweight




              用的情况1.比方说word里面输入的数字,如果没次都是对象,浪费


              可以定义26个对象。


                             不同的小对象变成一个对象,对象不同的属性,抽出作为外部


                              的参数


4.枚举(*)


采用抽象方法定义nextDay就将大量的ifelse语句转移成一个个独立的类



package itcast.com;

public abstract class WeekDay {

private WeekDay(){};



public final static WeekDay MON=new WeekDay(){

@Override

public WeekDay nextDay() {

// TODO Auto-generated method stub

return SUN;

}



};

public final static WeekDay SUN=new WeekDay(){

@Override

public WeekDay nextDay() {

// TODO Auto-generated method stub

return MON;

}



};





public abstract WeekDay nextDay() ;

/* public WeekDay nextDay() {

if(this==SUN){

return MON;

}

else {

return SUN;

}



}*/

//实现toString

public String toString(){

return this==SUN?"SUN":"MON";

}

}

//测试类

package itcast.com;

public class EnumTest {

public static void main(String[] args) {

WeekDay weekDay =WeekDay.SUN;

System.out.println(weekDay.nextDay());

}



}

5.枚举类的基本应用。

package itcast.com;

public class Enum {

/*

* Enum相当于一个类

* 对像相当与一个对象

*/

public static void main(String[] args) {



WeekDay weekDay=WeekDay.FRI;

//提供的静态方法

System.out.println(WeekDay.valueOf("SUN"));

//对象的放法

System.out.println(weekDay.getClass());

System.out.println(weekDay.getClass());

System.out.println(WeekDay.values().length);

System.out.println(weekDay.ordinal());

}

public enum WeekDay{



//定义weekDay枚举类的对象

SUN,MON,TUE,WED,TRI,FRI,SAT;

}

}


使用jdk提供的enum




枚举类没有构造方法!


我们定义一个带参数的构造方法!位置有规定


/*

* 如果需要调用指定的构造方法只需要定义

* 枚举对象()带参就好了

*/

public enum WeekDay{

//定义weekDay枚举类的对象

SUN(1),MON(),TUE(1,2),WED(2),TRI,FRI,SAT;

//1.不带参数构造方法定义成私有的

private WeekDay(){ System.out.println("first");};

//2.不带参数构造方法定义成私有的

private WeekDay(int day){System.out.println("second");};

//3.不带参数构造方法定义成私有的

private WeekDay(int day,int day2){System.out.println("third");};

}

}




构造方法要是私有的,来隐藏内部结构


6.反射


反射就是把java类中的各种成分映射成java类


可以得到类的Method Contructor Package


类constructor类代表字节码中的构造方法!




String.class.getConstructor(写参数.class);


构造方法可以得到什么东西!


可以构造一个实例对象.newInitargs( initargs)  编译时,运行时


 


获得方法再调用方法!
                   

举报

相关推荐

0 条评论