工程管理与快捷键配置
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;//把传过来的值给成员变量
}
}
}
//枚举只有一个成员时,就可以作为一个单例的实现模式。