Java基础增强

工程管理与快捷键配置

keys

workspace与project

preferences

JAVA 

compiler编译器

Installed JREs运行

-------------------

myeclipse下怎样调试

双击设置断点

然后进入debug界面

设置单个工程的javac与java

高版本javac不能在低版本java里运行

思考:myeclipse工作台中的所有工程继承工作台的配置,其中某个工程也可以覆盖工作台的配置,这是不是java面向对象的思想

继承与覆盖

------------------------------------

配置代码模板

preferences->Java->editor->templates

new->${line_selection}当前选用->$(cursor)光标位置

------------------------------------------------------

为保证一致性,也要保证jre库一致

右键,属性,build path->Libraries,然后增加jar包,或者库

------------------------------------------------------

静态导入

例:

使用求两个数的最大值和想减结果的绝对值

import static java.lang.*;

省略静态方法类名

---------------------------------------------------------

overload与override区别

重载:两个参数的个数和列表、类型一样,但是返回值不一样;

重写:如果父类的方法是私有的,子类写这个方法就等于一个全新的方法。

-------------------------------------------------------

可变参数

问题:

一个方法接受的参数个数不固定。

eg:System.out.prinltn(add(2,3,5));

System.out.prinltn(add(1,2,3,5));

可变参数的特点:

只能出现在参数列表的最后;

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

调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中数组的形式访问可变参数。

public static int add(intx,int...args){
int sum= 0;
for(int i=x;i<args.length;i++){//在方法体中数组的形式访问可变参数。
sum+=args[i];
}
return sum;
}

public static void main(String[] args){
System.out.println(add(2,3));
System.out.println(add(1,2,3));
}

-------------------------------------------------------------

增强for循环

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

注意事项:

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

集合变量可以是数组活实现了Iterable接口的集合类

注释ctrl+shift+/

for(int i=x;i<args.length;i++)可以写成

for(int arg:args)//int类型arg迭代一个集合变量args

------------------------------------------------------------

基本数据类型的自动拆箱与装箱

Integer iObj = 3;//装箱

Syso(iObj+12)//拆箱

和String s1 = new String("abc");

String s2 = new String("abc");//他们是不一样的

Integer i1 = 13;

Integer i2 = 13;//i1和i2是同一个,要装箱成为Integer对象的时候,如果数据在一个字节之类 -128~127之间,缓存在池里面,要用的时候直接拿

这叫享元模式 flyweight 很多很小的对象,他们有很多相同的东西,变成一个对象,不同的变成外部属性,当方法的参数传入

Integer i3 = Integer.valueOf(3);//valueOf有一个静态方法把一个整数变成Integer(基本整数变成包装对象)

Integer i4 = Integer.valueOf(3)//和上面的相同,返回true

-------------------------------------------------------------

枚举

(用普通类实现枚举)

package com.itheima;

public abstract class WeekDay{
	private WeekDay(){}//私有化构造方法,禁止创建新的对象
	
	public final static WeekDay SUN = new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return MON;
		}//内部类,定义了一个WeekDay的子类,并且创建了对象,所以要覆写方法
		
	};//用这个类的一个子类来创建实例对象,子类没有名字成为匿名类,具体代码在大括号内。;
	public final static WeekDay MON = new WeekDay(){

		@Override
		public WeekDay nextDay() {
			// TODO Auto-generated method stub
			return SUN;
		}};
	
	public abstract WeekDay nextDay();

	
	/*public WeekDay nextDay(){
		if(this前对象==SUN){
			return MON;
		}else{
			return SUN;
		}
	}*/
	//采用抽象方法定义nextDay就将大量的if else语句转移成为一个个独立的类
	public String toString(){
		return this == SUN?"SUN":"MON";//重写tostring,执行if语句
	}
}

public class EnumTest {

	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
			WeekDay weekDay = WeekDay.MON;
			System.out.println(weekDay.nextDay());
	}

}


这个类所定义出来的变量的值,只能是这里规定的那几个,而且值是对象类型的。

每一个枚举元素都是一个对象。

-------------------------------------

package com.itheima;

public class EnumTest {

	public static void main(String[] args) {

			WeekDay weekDay = WeekDay.MON;
//			System.out.println(weekDay.nextDay());
			
			WeekDay weekDay2 = WeekDay.FRI;//FRI是个对象;
			System.out.println(weekDay2); //这个枚举帮我们自动实现了toString	方法
			System.out.println(weekDay2.ordinal());
			System.out.println(weekDay2.getClass());
			System.out.println(WeekDay.valueOf("SUN"));//传过来一个字符串,变成WeekDay的实例对象,做网页文本框,下拉选,浏览器给服务器传过来的是字符串,变成JAVA对应的对象。
			System.out.println(WeekDay.values().length);//返回一个数组,把枚举类里的元素一个个装到数组里面,想对每一个成员遍历,得到所有成员的数组再进行遍历
	
			
	}



	public enum WeekDay{//枚举相当于一个类,枚举里面的元素就相当于类搞出来的实例对象
		SUN(1),MON,TUE,WED,THI,FRI,SAT;//可以打分号或者不打,用参数列表去区分调用的构造函数
		private WeekDay(){System.out.println("first");};//构造方法位于枚举列表之后
		private WeekDay(int day){System.out.println("second");};
	}
	
	public enum TrafficLamp{
		RED(30){//相当于new子类的实例对象,调用父类的有参的构造方法,用RED名称去引用这个对象,可以想到new DATE(200){};

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return GREEN;
			}
			
		},
		GREEN(45){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return YELLOW;
			}
			
		},
		YELLOW(5){

			@Override
			public TrafficLamp nextLamp() {
				// TODO Auto-generated method stub
				return RED;
			}
			
		};//每个元素是类的实例对象,因为abstract不能直接new,只能拿类的子类去new;子类的代码是一对大括号,子类名字不知道
		public abstract TrafficLamp nextLamp();//方法的返回值还是这个类的类型
		private int time;//每个灯都有时间
		private TrafficLamp(int time){//构造方法
			this.time = time;//把传过来的值给成员变量
		}
	}
} 
//枚举只有一个成员时,就可以作为一个单例的实现模式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值