java 自学日志【十八】---基础加强DAY26上

java基础加强:
英文基础很重要,了解常用的英文单词,对找工作和日后日常工作都非常有帮助;如IDE:integrated development environment 的缩写等;
了解jdk1.5的新特性:包括 泛型,for-each循环,自动装包/拆包,枚举,可变参数, 静态导入。

myeclipse工具:是eclipsed 的增强插件,扩展eclipse功能;都是用java写的,java图形化界面启动用的是javaw命令。
常用配置:
workspace新建与转换
     转换:File--->Switch WorkPlace--->要转换的工作间
     新建:File--->Switch WorkPlace--->Other.....
Project新建:
     方式一:File---->new----> Java Project
     方式二:Package Explorer空白区右键--->new----> Java Project
Package新建:(新建Project后才能新建Package)
     方式一:选中Project或Project下的src文件夹右键--->new---->Packege
     方式二:File---->new--->Package--Source Folder选择工程--->包命名
注意:命名包,一般选择公司的网址反转后+.具体有意义的名字,这样做的目的是为了尽量让包下新建的类,在整个Internet上的命名空间中唯一。
快捷键设置
   路径:Window--->Preferences--->General--->Keys(Content Assist)
Perspective与View的关系
     View:每个具体的小窗口(Eclipse中有2000多个)
     Perspective:为完成某一功能而聚集在一起的多个View的集合
      可在Window菜单下选择Open Perspective和Show View
设置编译环境(javac)和运行环境(java)
     设置整个工作间:Window--->Preferences--->Java--->Compiler(设置javac)和Installed JRE(设置java)
     设置单个工程:选择Project名右键---->Properties--->Java Compiler 和Run/Debug Settings
     注意:高版本的java可以运行低版本的javac编译的程序,但低版本的java不能运行高版本的javac编译的程序。
工作台的配置和单个项目的配置是继承的关系:单个项目如果没有配置会继承工作台的配置。单个项目如果配置了在会覆盖工作台的配置。
调试程序
    步骤:在要调试的代码行的最前边双击加断点,然后代码区右键--->debug as --->在调试透视图中,选中要查看的变量,右键选择watch。调试完成后,通过右上角的按钮切换到所需的透视图。
设置模板
    设置路径:Window--->Preferences--->Java--->Editor----Templates
    使用模板:选中要使用模板的代码行,右键选择Surround  With——>选择要使用的模板

Source 和 Refactor
     选中类名或在代码区,右键后可选择Source和Refactor条目。可实现重命名、抽取方法、重写父类方法、产生构造函数等功能。
将工程导入工作台步骤:
a---把该工程文件copy到工作台目录下。
b--- File-->Import--->Existing Projects into WorkSpace--->选择已经copy过了的工程
注意:如果该工程原来的库与现在的不同,则需要通过右键的Build Path条目,先删除导入时默认添加的库,然后选择自己的库

静态导入:static import

import语句:可以导入一个类或某个包中的所有类(不包括子包中的类)

import  static 语句:导入一个类中的某个静态方法或所有静态方法。

import static  java.lang.Math.*;
public class StaticImport 
{
	public static void main(String [] args)
	{
		int x = 12 ;
		try 
		{
			x++;
		} 
		finally 
		{
			System.out.println(x++);
		}
		System.out.println(x);
		System.out.println(max(4,5));
 		System.out.println(abs(5-16));
	}
}  

当类重名时,需要指定具体的包名;当方法重名时,需要指定该方法所属的对象或类。

若设置的编译器版本低,但代码中用到了新版本的特性,MyEclipse会提示错误,此时只需修改为新版本的编译器即可。


可变参数:Variable parameter,一个方法中接受的参数个数不确定;

①只能出现在参数列表的最后一位;
②...位于变量类型和变量之间,前后有无空格均可。
③调用参数方法时,编译器为该可变参数隐含创建一个数组(其实,可变参数就是一种数组的简写形式),在方法体中以数组形式访问可变参数。 

class VariableParameter 
{
	public static void main(String[] args) 
	{
		System.out.println(getSum(23, 28, 455));
		System.out.println(getSum(34, 46, 8, 44));
	}
	public static int getSum(int x,int ...args)
	{
		int sum = x;
		for(int arg:args)
		{
			sum += arg;
		}
		return sum;
	}
}

增强for循环:enhanced for-each 
语法:for(VariableModifiers type 变量名:集合变量名){……}
注意事项:type前可加修饰符,如加final,以方便内部类访问等;迭代变量必须在()中定义;集合变量名可以是数组或事项了Iterable接口的集合类.


基本数据类型的装箱与拆箱:Boxing and Unboxing Conversion 
基本数据类型:
byte;short;int;long;char;float;double;boolean;
对应的包装类:Byte;Short;Integer;Long;Character;Float;Double;Boolean;
装箱:把基本数据类型转换成对应的包装类。
拆箱:把包装类转成对应的基本数据类型。
在装箱和拆箱过程中有一个新特性,如下边代码所示:

class AutoBox 
{
	public static void main(String[] args) 
	{		
		Integer iobj = 13;//基本数据类型的装箱
		System.out.println(iobj+12);//基本数据类型的拆箱		
		//基本数据类型装箱拆箱的一个特性------(享元模式)
		//当Integer封装的数据在一个字节之间(-128~127),则只建立一个对象,成为享元
		Integer i1= 127;
		Integer i2 =127;
		System.out.println(i1 == i2);//ture
		
		//当Integer封装的数据超出一个字节,则每个都新建一个对象。	
		Integer i3 = 128;
		Integer i4 = 128;
		System.out.println(i3 == i4);//false
		
		Integer i5 =Integer.valueOf(3);  
		Integer i6 =Integer.valueOf(3);
		System.out.println(i5 == i6);//true		
	}
}
上边的这种设计模式即为享元模式(flyweight):

如果有很多很小的对象,它们有很多属性相同,那就可以把他们变成一个对象,把不同的东西变成外部属性,作为方法的参数传入,称之为外部状态,把相同的属性称为内部状态。


枚举:Enum
1.为什么要有枚举?
     问题:要定义星期几或者性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0。
     枚举就是要让某个类型的变量的值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制程序中填写的非法值,普通变量的方式无法在开发阶段实现这一目标。它跟泛型一样,都是把运行期的错误,提前到编译期来控制,提高了安全性。
   注意:可以创建一个enum类,把它看做一个普通的类。除了它不能继承其他类了。(java是单继承,它已经继承了Enum).
2.用普通类 如何实现枚举功能?定义一个WeekDay的类来模拟枚举功能。步骤如下:
      a.私有构造方法。
      b.每个元素分别用一个公有的静态成员变量来表示。
      c.可以有若干公有方法或抽象方法。例如,要提供nextDay()方法必须是抽象的。

abstract class WeekDay
{
	private WeekDay(){}
	public final static WeekDay SUN = new WeekDay()
	{
		//采用抽象方法就是将if else语句转移一个个独立的类
		public  WeekDay nextDay()
		{
			return MON;
		}
	};
	public final static WeekDay MON = new WeekDay(){
		public  WeekDay nextDay()
		{
			return TUES;
		}
	};
	public final static WeekDay TUES = new WeekDay(){
		public  WeekDay nextDay()
		{
			return WES;
		}
	};
	public final static WeekDay WES = new WeekDay(){
		public  WeekDay nextDay()
		{
			return THUR;
		}
	};
	public final static WeekDay THUR = new WeekDay(){
		public  WeekDay nextDay()
		{
			return FRI;
		}
	};
	public final static WeekDay FRI = new WeekDay(){
		public  WeekDay nextDay()
		{
			return SAT;
		}
	};
	public final static WeekDay SAT = new WeekDay(){
		public  WeekDay nextDay()
		{
			return SUN;
		}
	};
	public abstract WeekDay nextDay();
	
	public String toString()
	{
		if(this == MON){
			return "MON";
		}else if(this == TUES){
			return "TUES";
		}else if(this == WES){
			return "WES";
		}else if(this == THUR){
			return "THUR";
		}else if(this == FRI){
			return "FRI";
		}else if(this == SAT){
			return "SAT";
		}else{
			return "SUN";
		}
	}
}

枚举的基本应用
①定义一个Weekday的枚举
②枚举类的values,valueOf,name,toString,ordinal等方法
③枚举是一种特殊的类,其中的每一个元素都是该类的一个实例对象,可以调用WeekDay.SUN.getClass().getName和WeekDay.class.getName()方法。

enum WeekDay
{
	//枚举创建时,调用构造方法
	SUN(4),MON(),TUES,WES,THUR,FRI,SAT;
	private WeekDay(){System.out.println("first");}
	private WeekDay(int x){System.out.println("second");}
}

带有构造方法和方法的枚举举例:

enum TrafficLamp
{
	RED(30)
	{
		public  TrafficLamp nextLamp()
		{
			return GREEN;
		}
	},
	GREEN(45)
	{
		public  TrafficLamp nextLamp()
		{
			return YELLOW;
		}
	},
	YELLOW(15)
	{
		public  TrafficLamp nextLamp()
		{
			return RED;
		}			
	};
	
	public abstract TrafficLamp nextLamp();
	private int time;
	private TrafficLamp(int time){this.time =time;}
}
枚举,预先给对象定义好一些值,在给对象赋值时,如果不是指定的值,就报错,不能通过编译。  
枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法,
枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后边要有分号与其他成员分隔。
把枚举中的成员方法或变量等放在枚举元素的前边,编译器会报错。
   
带构造方法的枚举的特点:
①构造方法必须定义成私有的;
②枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
   
当枚举只有一个成员时,就可以作为一个单例的实现方式。

enum TrafficLamp
{
	YELLOW;
	
	public static TrafficLamp getInstance()
	{
		return YELLOW;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值