黑马程序员--进阶篇:枚举,重构

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

1.eclipse与myeclipse的关系:扩展eclipse的功能.


2.myeclipse是有java语言编写的。


3.集成开发环境:integrated development environment。


4.IDE开发工具都支持使用工程化方式管理一个项目的程序开发过程,一般来说一个相对独立的项目就
   是一个工程,一个项目中涉及的多个java文件,资源文件等用一个工程进行管理,在不使用工程管理
   的情况先,如果一个项目中包括多个java源文件,变成人员需要精心维护这些源文件之间,以及源文
   件的目录关系,需要逐一编译这些源文件,需要手工启动运行编译后的结果,如果将一个程序的所有
   源文件用一个工程来组织,开发工具能对所有源文件集中管理,记住每个源文件的位置和相互关系。
   工程中有哪几个源文件,启动类是哪个、启动参数设置等配置信息在工程中都记录。


5.一个workpace可以包含多个project,一个workpace保留了eclipse的一套环境选项的配置,例如:所
   使用的javac和java命令。


6.调试或查看变量值:在编写工具中的代码前双击进行。


7.一个perspective代表了若干个view的集合,如何显示各种view。


8.新建模板:window-->prefereces-->editor-->templates;


9.静态导入:
   1.import语句可以导入一个类或某个包中的所有类;
   2.import static语句导入一个类中的某个静态方法或所有静态类;


10.实验例子:求两个数字的最大值和相见结果的绝对值;
(1):使用java中提供的math类进行比较;
(2):代码:
package zhang;
import static java.lang.Math.*;
public class Static_Import {
public static void main(String[] args){
System.out.println(max(3, 6)); //求出两个数字的最大值;
System.out.println(abs(3-6)); //求出两个数字差的绝对值;
}
}


11.overload(重载)与override(重写)区别 :
overload:它可以表现类的多态性,可以是函数里面可以有相同的函数名,但是参数名、返回
值,类型不能相同;或者说可以改变参数、类型、返回值但是函数名字依然不变;
override:在子类继承父类时候子类中可以定义某方法与其父类有相同的名称和参数,当子类
在调用这一函数时自动调用子类的方法,而父类相当于被覆盖重写了;


方法的overload和override是java多态性的不同表现,override是父类与子类之间多态性的一
中表现,overload是一个类中多态性的一种表现,如果在子类中定义某方法与其父类有相同的
名称和参数,我们说该方法被重写,子类的对象使用这个方法时,将调用子类中的定义,对它
而言,父类中定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,他们或有不同
的参数个数或有不同的参数类型,则称为方法的重载,重载的方法可以改变返回值的类型。


12.可变参数的特点:
1.只能出现在参数列表的最后;
2.位于变量类型和变量名之间,前后有空格都可以;
3.调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中医数组的形式
访问可变参数。


13.可变参数的示例代码;
package zhang;


public class VariableParameter { //类名的意思是可变参数
public static void main(String[] args){
System.out.println(abb(2,4)); //传入参数;
System.out.println(abb(4, 5, 6));


}


//可变参数进行累加
public static int abb(int x, int...args){ //此处"..."代表的意思是接收若干个整数参数
int sum = x;
for(int i = 0; i < args.length; i++){ /*调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中医数组的形访问可变参数。*/
sum = sum + args[i];
}
return sum;
}
}


14.for循环增强:
1.语法:for(type变量名:集合变量名){。。。}
2.注意事项:迭代变量必须在()中定义,集合变量可以是数组或实现了iterable(可迭代)接口


15.代码示例:
package zhang;


public class Iterable {
public static void main(String[] args){
System.out.println(abs(7, 8));
System.out.println(abs(9, 10, 18));
}


public static int abs(int x, int...args){
int sum = x;
//使用for循环的加强版,来对传入的值求和的运算
for(int arg : args){ //int:变量的数据类型; arg:变量; args:迭代的集合名;另外对进行迭代时集合通常会比单个变量对各"s",来进行区别
sum = sum + arg;
}

return sum; //返回数值
}
}


16.基本数据类型的自动拆箱与装箱:
1.自动装箱:Integer num = 12;
2.自动拆箱:System.out.println(num + 12);
3.基本数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;
System.out.println(num1 == num2);


17.refactor(重构);


18.数据进行装箱与拆箱,以及当一个"Integer"范围测试,代码示例:
package zhang;


//自动拆箱与组装
public class AutoBox {
public static void main(String[] args){

//一个基本数据进行进行装箱的解析
Integer it = 12; //这是一个装箱的过程; 其中"12"(一个基本数据类型)装成"Integer"对象并付给了的引用变量"it";

//对数据进行拆箱
System.out.println(it + 12);

/**对于Integer数据在"-128~127"之间进行数值比较数值相等时时true,超出则为false,
* 因为在这些范围的数字是常用的,所以设计者将其设置成一个固定模式,无需进行多想
*/

//1.示例在范围内的"Integer"
Integer it1 = 12;
Integer it2 = 12;
System.out.println(it1 == it2); //比较两个"Integer"数字和范围内是否相等

//2.超出范围内的数字进行判断
Integer ir = 158;
Integer ir1 = 158;
System.out.println(ir == ir1); //比较在超出范围的数字是否为true
}
}


19.享元模式(flyweight):如果有很多很小的对象他们有很多相同的地方,可以编成一个对象(称为内部
 对象),还有不同的地方,变成外部属性,作为方法参数传入 (称为外
 部对象)。


20.将一些基本数值进行手工打包包装成一个Integer,代码示例:
Integer it3 = Integer.valueOf(300); //"Integer"中有一个静态方法"valueOf"将一个整数变成一个"Integer",手工将数值做成包装类对象
Integer it4 = Integer.valueOf(300);
System.out.println(it3 == it4); //进行测试比较
   
21.枚举(enum):枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器
就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量
的方式在开发阶段无法实现这一目标。


22.用普通的类实现枚举功能:可以有若干个公有方法或抽象方法,例如:要提供nextDay方法必须是抽
象的,采用抽象方法定义nextDay就可以将大量的if..else语句转移成一个个
独立的类。


23.示例:
package zhang;


public abstract class WeekDay_otherway {
private WeekDay_otherway(){

}

//用"WeekDay_otherway"的子类去"new"对象,写上"{}"表示用"WeekDay_otherway"子类去创建一个对象,但子类没有名字所以称为"无名类"
public final static WeekDay_otherway SUN = new WeekDay_otherway(){
public WeekDay_otherway nextDay(){
return MOU;
}
}

public final static WeekDay_otherway MOU = new WeekDay_otherway(){
public WeekDay_otherway nextDay(){
return SUN;
}
}


public abstract WeekDay_otherway nextDay();

public String toString(){
return this == SUN? "SUN" : "MOU";
}
}


24.package zhang;


public class Enum {
public static void main(String[] args){
WeekDay01 weekday = WeekDay01.MON;
System.out.println(weekday.ordinal());
System.out.println(weekday.valueOf("FRI").toString()); //"valueOf"表示接受从外面传进来的值
System.out.println(weekday.values().length); //将所设置的枚举对象转换成数组并用"valueOf"实现出数组的个数
}


//采用系统提供的枚举类来进行测试
public enum WeekDay01{
SUN, MON, TUE, WED, THU, FRI, SAT
}
}


25.代码示例:
package zhang;


public class Enum {
public static void main(String[] args){
WeekDay01 weekday = WeekDay01.MON;
System.out.println(weekday.ordinal());
System.out.println(weekday.valueOf("FRI").toString()); //"valueOf"表示接受从外面传进来的值
System.out.println(weekday.values().length); //将所设置的枚举对象转换成数组并用"valueOf"实现出数组的个数
}


//采用系统提供的枚举类来进行测试
public enum WeekDay01{
//在枚举中所有的构造方法放在列表之后
SUN(1), MON, TUE, WED, THU, FRI, SAT;

private WeekDay01(){ //此处必须使用"private"来定义
System.out.println("first"); //用到了枚举类则“weekDay”则会被初始化
}

private WeekDay01(int day){
System.out.println("second"); //若这个方法被调用必须列表的中的每个加入数字,例如:SUN(1)必须按照此种形式;
}
}
}


26.实现抽象枚举:
package zhang;


public class Enum {
public static void main(String[] args){
WeekDay01 weekday = WeekDay01.MON;
System.out.println(weekday.ordinal());
System.out.println(weekday.valueOf("FRI").toString()); //"valueOf"表示接受从外面传进来的值
System.out.println(weekday.values().length); //将所设置的枚举对象转换成数组并用"valueOf"实现出数组的个数
}


//采用系统提供的枚举类来进行测试
public enum WeekDay01{
//在枚举中所有的构造方法放在列表之后
SUN(1), MON, TUE, WED, THU, FRI, SAT;

private WeekDay01(){ //此处必须使用"private"来定义
System.out.println("first"); //用到了枚举类则“weekDay”则会被初始化
}

private WeekDay01(int day){
System.out.println("second"); //若这个方法被调用必须列表的中的每个加入数字,例如:SUN(1)必须按照此种形式;
}
}


//抽象枚举
public enum Color{

//定义列表,若要对类进行实例,要将列表的元素加"{}"
Green(30){
public Color nextColor(){
return Yellow;
}
}, Yellow(5){
public Color nextColor(){
return Red;
}
}, Red(30){
public Color nextColor(){
return Green;
}
};

//抽象类方法
public abstract Color nextColor(); //此处定义抽象类方法必须使用"public"

//给红绿灯设置时间
private int time;
private Color(int time){
this.time = time;
}
}
}



27.枚举只有一个成员时,就可以作为一种单例的实现方式。

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值