------- android培训、java培训、java学习型技术博客、期待与您交流 ----------
Java基础总结之Java基础增强
开发工具myeclipse的使用
MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对EclipseIDE的扩展,利用它我们可以在<数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境。
workspace 与 project
project(工程):项目的工程化管理,一个相对独立的项目就是一个工程
workspace:(工作间):也就是存放项目文件的地方,一个workspace中可以包含多个project,对一个workspace进行配置将影响下面所有的project
其实workspace与project的关系可以看做是java面向对象中的继承与覆盖的关系。
workspace的新建:
File--->Switch WorkSpace-->Others
快捷键的配置(content assist):
Window--->preferences--->General--->Keys--->"Content Assist"
(如果已有绑定,则需要先解除绑定“Remove Binding”然后再增加新的绑定)
在myeclipse怎么调试一个变量?
双击添加端点--->切换到Debug透视图下--->右键选中变量---->Watch
怎么显示某个视图(view)?
Window--->Show View
如何设置javac与java?
Window--->preferences--->Java--->Compiler
Window--->preferences--->Java--->Installed JREs
低版本的java不能运行高版本的javac编译的程序。
设置单个工程的javac与java
右键选中工程--->Properties--->Java Compiler
右键选中工程--->Run As--->Run Configurations--->JRE
在eclipse中配置java模板代码
Window--->preferences--->Java--->Editors--->Content Assist--->Templates--->New--->分别在Name和Pattern中填入名称和内容
line_selection:原来的内容
cursor:插入光标
在使用时选中代码,通过Surround With选择要使用的代码块即可。
在eclipse中导入已有工程时的注意问题。
导入方法,File--->Import--->General--->Existing Projects Into Workspace
在导入后,如果原工程使用的JDK信息和现在的不一致,则会产生错误。
解决办法:
右键选择工程--->Build Path--->Configure Build Path--->Libraries--->将原有JDK的库删除(Remove)后添加(Add Library)新的库
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
静态导入
省略静态方法的类名,简化书写。
Import:import:可以导入一个类或者一个包中的所有类。
Static Import:可以导入一个类中的某个静态方法或者所有静态方法。
package com.itheima.day1;
//静态导入语句
//import static java.lang.Math.max;
import static java.lang.Math.*;
public class StaticImport {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(abs(3 - 6));
System.out.println(max(3, 6));
}
}
可变参数
如果一个方法接收的参数个数不固定,可使用可变参数。
例如一个求和方法,可能求n个参数的和
add(2,3,4);
add(2,3)
如果不想定义多个接收不同参数的add方法,那么可以用可变参数的形式解决
package com.itheima.day1;
public class VarableParameter {
public static void main(String[] args){
System.out.println(add(2, 3, 4));
System.out.println(add(2,3));
}
public static int add(int x,int ... args){
int sum = x;
for(int i=0;i<args.length;i++)
{
sum = sum+args[i];
}
return sum;
}
}
可变参数的特点:
只能出现在参数列表的最后;
...位于变量类型和变量名直接,前后有无空格都可以;
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中数组的形式访问可变参数。
增强for循环(foreach语句)
语法:
for(type 变量名 : 集合变量名){}
注意事项:
迭代变量名必须在()中定义
集合变量可以是数组或实现了Iterable接口的集合类
package com.itheima.day1;
public class ForEach {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(add(2,3));
}
public static int add(int x,int ...args){
int sum = x;
for(int arg : args){
sum = sum+arg;
}
return sum;
}
}
基本数据类型的装箱与拆箱
Integer iObj = 3;//装箱,自动将一个基本数据类型装成一个Integer对象并赋给其引用变量。
System.out.println(iObj + 4);//拆箱,自动将一个Integer对象拆箱成一个基本数据类型参与加法运算。
package com.itheima.day1;
public class AutoBox {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Integer iObj = 3;//装箱,下面同理
System.out.println(iObj + 4);//拆箱,下面同理
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2);
Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3 == i4);
}
}
运行结果:
7
true
false
从运行结果可以看出,两个不同的 Integer对象装箱出来的对象是同一个,那是因为java为了避免将一个字节之内的使用频率较高的数据(-128~127)放在了缓冲池里面,需要用的时候直接拿的是缓冲池里面的同一对象。这种思想叫享元模式:
享元模式:
有很多个很小的对象,他们有很多属性相同,便将他们变成同一个对象,将不同的属性变成方法的参数,称之为外部状态,相同的属性称之为内部状态。这样做可以尽量避免产生过多的相似的碎小对象,节约内存。
枚举(Enumeration)
首先通过一个普通的类实现
package com.itheima.day1;
public abstract class WeekDay{
//私有化构造方法,禁止创建新的对象
private WeekDay(){}
public final static WeekDay SUN = new WeekDay(){
//通过内部类定义一个WeekDay的子类,子类为匿名内部类没有名称,具体代码在大括号内。
//并通过其创建一个WeekDay对象,复写父类抽象方法
public WeekDay nextDay() {
return MON;
}
};
public final static WeekDay MON = new WeekDay(){
public WeekDay nextDay() {
return SUN;
}};
public abstract WeekDay nextDay();
//采用抽象方法避免过多的if else语句,将方法转移至独立的类中。
public String toString(){
//重写tostring方法。
return this == SUN?"SUN":"MON";
}
}
package com.itheima.day1;
public class EumTest {
/**
* @param args
*/
public static void main(String[] args) {
WeekDay weekDay = WeekDay.MON;
System.out.println(weekDay.nextDay());
}
}
在上面的类中给这个类的引用变量赋值的时候只能赋在类中定义好的常量,不能指定规定值意外的其它值,而且这个值是类的对象类型的,这就是枚举。
package com.itheima.day1;
public class EnumTest {
/**
* @param args
*/
public static void main(String[] args) {
//定义变量的时候就只能使用已经定义好的元素。
WeekDay weekDay = WeekDay.FRI;
WeekDay weekDay1 = WeekDay.SUN;
WeekDay weekDay2 = WeekDay.MON;
//测试枚举类型对象的方法,因为枚举自动实现了toString方法。
System.out.println(weekDay.name());
System.out.println(weekDay1.ordinal());
System.out.println(weekDay2.getClass());
//静态方法,传过来一个字符串,变成WeekDay的实例对象,在网页的下拉框中引用较多
System.out.println(WeekDay.valueOf("FRI"));
//遍历枚举中的所有元素,返回一个数据
System.out.println(WeekDay.values().length);
TrafficLamp trafficLamp = TrafficLamp.RED;
trafficLamp.nextLamp();
}
//枚举就相当于是一个类,类中定义好的元素可以看做是类的对象。
public enum WeekDay{//定义枚举的方法
SUN(1),MON(),TUE,WED,THU,FRI,SAT;//元素列表之后有内容的话,后面必须加上';',
//定义的所有其它信息必须位于元素列表之后
//无参构造函数
private WeekDay(){
System.out.println("first");
}
//带参数的构造函数
private WeekDay(int x){
System.out.println("SECOND");
}
}
//交通灯简单模拟,三种灯,每个灯都有时间,
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
//每个元素是类的实例对象,因为abstract不能直接new,只能拿类的子类去new;子类的代码是一对大括号,子类名字不知道
//抽象的nextLamp方法,次方法的返回值还是这个类自己
public abstract TrafficLamp nextLamp();
//定义灯的时间
private int time;
//通过构造方法指定灯的时间
private TrafficLamp (int time)
//把传过来的值赋给成员变量
{this.time = time;}
}
}
注意:如果枚举中只有一个对象,那么这也是单例的一种实现方式。方法是,定义一个枚举,并且这个枚举中只定义一个元素。