我的第一个java项目——面向对象设计。
2015-09-21 20:09
489 查看
1. 需求(转化成用户故事):
想象一下,经常有新闻/视频+留言版这种常见的网页形式,现在我们用控制台(console)来模拟这种网页,在console中,首先2名足球明星、2名篮球明星、1名游泳明星登场,然后明星展示才艺,最后粉丝表达感情。
要求用面向对象的思想来实现这一功能。
2. 思路(转化成backlog)
(1)各位明星都是各领域的运动员,他们都属于运动员,而运动员又是人类,那么我们设计的时候,设计两次继承,人类->运动员->各领域运动员。
(2)不同领域的运动员,他们所从事的项目有其特别性,比如足球篮球以进球为胜负标准,田径一般以时间、长度或高度为胜负标准,因此他们的行为也各不相同,比如足球篮球有射门或投篮的行为,田径运动员有强力冲刺、跳跃的行为,但相似的项目又有类似的行为,因此,我们用接口来模拟这种行为的多样性。
(3) 粉丝继承于人类,他们对喜欢的明星很喜爱,对不喜欢的明星黑得体无完肤。
3. 类的设计(转化成具体的Process)(类图可以手画)
由于时间原因,类的设计较好的体现了继承和多态的思想,但没有很好的体现封装,同学们可以在设计的时候补齐这一块。
代码文件解释:
(1)Person:人类,抽象类
(2)Athlete:运动员类,继承自Person
(3)GoalAthlete:接口,具备得分行为的运动员,体现多态的思想
(4)SportsFan:粉丝类,继承自Person
(5)SoccerAthlete:足球运动员,继承自Athlete,实现GoalAthlete接口
BasketBallAthlete:篮球运动员,继承自Athlete,实现GoalAthlete接口
Swimmer:游泳运动员,继承自Athlete
图注:实线箭头是继承关系,虚线箭头是接口实现,斜体的是抽象对象或抽象方法。
附:代码导入方法:
1. 新建java工程,在src上右键,选择import;
2. 选择File System,选择代码所在的目录,选中左侧的文件夹,确保所有.java文件被选中,点finish。
1.package intermediateDemo_OOP;
public class Athlete extends Person {
private String value;//身价
private String specialTechnique;//特别的技能
public Athlete(String myValue, String mySpecialTechnique,String myName, int myAge, char myGender){
super(myName, myAge, myGender);//显示调用父类的构造函数
value=myValue;
specialTechnique=mySpecialTechnique;
}
@Override
//重写父类的getName方法
public String getName(){
return super.getName();
}
//获取特殊技能
public String getSpecialTechnique(){
return this.specialTechnique;
}
@Override
//重写父类的抽象方法
public void think() {
System.out.println("竞技就是我的灵魂,永远追求更完美的自己!");
}
//问好
public void sayHello(String specialHello){
System.out.println(specialHello);
}
//秀一下
public void showOff(String specialShowOff){
System.out.println("容我上场之前亮个相:"+specialShowOff);
}
}
2.
package intermediateDemo_OOP;
public class BasketBallAthlete extends Athlete implements GoalAthlete {
private String strongHand;//惯用手
private String club;//所在俱乐部
//构造函数
public BasketBallAthlete(String myHeavyFoot, String myclub,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){
super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类构造函数
strongHand=myHeavyFoot;
club=myclub;
}
@Override
//重写分类方法
public String getName(){
return super.getName();
}
@Override
//重写接口GoalAthlete的方法
public void shoot() {
System.out.println(this.getName()+"出手投篮!");
}
@Override
//重写接口GoalAthlete的方法
public void goal() {
//定义一个随机数,根据随机数的值,来决定是否得分
int random=new java.util.Random().nextInt(3);
if(random==0){
System.out.println(this.getName()+"三不沾,空气在叹息!");
}else if (random==1){
System.out.println(this.getName()+"打铁!");
}else if(random==2){
System.out.println(this.getName()+"2分入账!");
}else {
System.out.println(this.getName()+"3分远投命中!");
}
}
}
3.
package intermediateDemo_OOP;
public interface GoalAthlete {
public void shoot();
public void goal();
}
4.
package intermediateDemo_OOP;
public abstract class Person {
private String name;
private int age;
private char gender;
//构造函数
public Person(String myName, int myAge, char myGender){
name=myName;
age=myAge;
gender=myGender;
}
//获取名字
public String getName(){
return this.name;
}
//行走,子类可以不重写
public void walk(){
System.out.println("走两步!");
}
//笑,子类可以不重写
public void smile(){
System.out.print("来自抽象人类的呵呵~");
}
//思考,抽象方法,子类必须对其进行重写
public abstract void think();
}
5.
package intermediateDemo_OOP;
import java.util.concurrent.ThreadLocalRandom;
public class PersonTest {
public static void main(String[] args){
/*
* 1. 实例化C罗,梅西,科比,詹姆斯和宁泽涛几位运动员
* 2. 实例化小C,小梅,小科,小詹,小红几位粉丝
* 3. 各位体育明星展现才能
* 4. 粉丝表达情感
* */
//1. 实例化4个运动员
SoccerAthlete CR7=new SoccerAthlete("右脚", "皇家马德里","8000万英镑", "跳水,电梯球", "C罗", 30, '男');
SoccerAthlete Messi=new SoccerAthlete("左脚", "巴塞罗那","未知", "踢球迷,盘带", "梅西", 28, '男');
BasketBallAthlete Kobe=new BasketBallAthlete("右手", "湖人","3000万美元", "体味凌晨四点的洛杉矶", "科比", 37, '男');
BasketBallAthlete James=new BasketBallAthlete("右手", "骑士","5000万美元", "走步上篮", "詹姆斯", 31, '男');
Swimmer Ning=new Swimmer("自由泳", "中国", "500万人民币", "帅", "宁泽涛", 22, '男');
//2. 实例化4个粉丝
SportsFan littleC=new SportsFan("足球", "C罗", "梅西","小C", 28, '男');
SportsFan littleMei=new SportsFan("足球", "梅西", "C罗","小梅", 26, '男');
SportsFan littleKe=new SportsFan("篮球", "科比", "詹姆斯","小科", 30, '男');
SportsFan littleZhan=new SportsFan("篮球", "詹姆斯", "科比","小詹", 26, '男');
SportsFan littleHong=new SportsFan("无", "宁泽涛", "澳洲小鲜肉","小红", 21, '女');
//3. 明星展现才能
//各位明星走一个
System.out.println("请各位明星给大家问个好~");
System.out.println("-------------------------");
CR7.sayHello(CR7.getName()+":我用清扬,没有头屑!我最擅长"+CR7.getSpecialTechnique());
Messi.sayHello(Messi.getName()+":求别黑我大红蓝巴萨!我最擅长"+Messi.getSpecialTechnique());
Kobe.sayHello(Kobe.getName()+":你见过凌晨四点的洛杉矶吗?我最擅长"+Kobe.getSpecialTechnique());
James.sayHello(James.getName()+":OOOOOOOOO~我最擅长"+James.getSpecialTechnique());
Ning.sayHello(Ning.getName()+":大家好,我是"+Ning.getName()+"我最大的特点是:"+Ning.getSpecialTechnique());
System.out.println("----------割--------------");
//明星展示才艺
System.out.println("请各位明星秀一下~");
System.out.println("-------------------------");
System.out.println(CR7.getName()+"来了");
CR7.showOff("看我发型!");
CR7.shoot();
CR7.goal();
System.out.println("\n"+Messi.getName()+"来了");
Messi.showOff("看台那球迷,你别动!");
Messi.shoot();
Messi.goal();
System.out.println("\n"+Kobe.getName()+"来了");
Kobe.showOff("看我手型");
Kobe.shoot();
Kobe.goal();
System.out.println("\n"+James.getName()+"来了");
James.showOff("爱卿们平身");
James.shoot();
James.goal();
System.out.println("\n"+Ning.getName()+"来了");
Ning.breastStroke();
Ning.butterflyStroke();
System.out.println("----------割--------------");
//4. 粉丝们表达感情
System.out.println("粉丝们表达一下感情");
System.out.println("-------------------------");
System.out.println("C罗球迷走一个");
littleC.think();
littleC.love();
littleC.hate();
System.out.println("\n梅西球迷走一个");
littleMei.think();
littleMei.love();
littleMei.hate();
System.out.println("\n科密走一个");
littleKe.think();
littleKe.love();
littleKe.hate();
System.out.println("\n詹姆斯球迷走一个");
littleZhan.think();
littleZhan.love();
littleZhan.hate();
System.out.println("\n宁泽涛粉丝走一个");
littleHong.think();
littleHong.love();
littleHong.hate();
}
}
6.
package intermediateDemo_OOP;
public class SoccerAthlete extends Athlete implements GoalAthlete {
private String heavyFoot;//惯用脚
private String club;//所在俱乐部
//构造函数
public SoccerAthlete(String myHeavyFoot, String myclub,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){
super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类的构造函数
heavyFoot=myHeavyFoot;
club=myclub;
}
@Override
//重写父类的方法
public String getName(){
return super.getName();
}
@Override
//实现接口GoalAthlete的方法
public void shoot() {
System.out.println(this.getName()+"起脚射门!");
}
@Override
//实现接口GoalAthlete的方法
public void goal() {
//定义一个随机数,根据随机数的值,来决定是否得分
int random=new java.util.Random().nextInt(2);
if(random==0){
System.out.println(this.getName()+"打了飞机,球飞向宇宙!");
}else if (random==1){
System.out.println(this.getName()+"击中门框,很遗憾!");
}else{
System.out.println(this.getName()+"GOOOOOOOOOOOL!");
}
}
}
7.
package intermediateDemo_OOP;
public class SportsFan extends Person {
private String favoriteSports;
private String favoriteStar;
private String hatedStar;
public SportsFan(String myFavoriteSports, String myFavoriteStar,String myHatedStar,String myName, int myAge, char myGender){
super(myName, myAge, myGender);//显示调用父类的构造函数
favoriteSports=myFavoriteSports;
favoriteStar=myFavoriteStar;
hatedStar=myHatedStar;
}
@Override
//重写父类的抽象方法,粉丝的思维逻辑
public void think() {
System.out.println("爱就爱的深沉,恨就恨得彻底!"+this.favoriteStar+"加油");
}
//粉丝的爱
public void love(){
int saySomething=new java.util.Random().nextInt(2);
//用switch语句对随机数进行判断,然后输出话语
switch(saySomething){
case 0:
System.out.println("对"+this.favoriteStar+"爱得深沉!");
break;
case 1:
System.out.println("最爱"+this.favoriteStar);
break;
case 2:
System.out.println(this.favoriteStar+"么么哒");
default:
System.out.println(this.favoriteStar+" best");
}
}
//粉丝的恨
public void hate(){
int saySomething=new java.util.Random().nextInt(2);
//用if语句对随机数进行判断,然后输出话语
if(saySomething==0){
System.out.println("恨"+this.hatedStar+"入骨!");
}else if(saySomething==1){
System.out.println(favoriteStar+"最棒,"+hatedStar+"算个啥");
}
else {
System.out.println(hatedStar+",呵呵");
}
}
}
8.
package intermediateDemo_OOP;
public class Swimmer extends Athlete {
private String skilledType;//最擅长的泳姿
private String country;//所在国家
//构造函数
public Swimmer(String mySkilledType, String myCountry,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){
super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类构造函数
skilledType=mySkilledType;
country=myCountry;
}
@Override
//重写父类方法
public String getName(){
return super.getName();
}
//蝶泳
public int butterflyStroke(){
//定义随机数,输出蝶泳游出多少米
int random=new java.util.Random().nextInt(500);
System.out.println(this.getName()+"蝶泳泳姿已游出"+random+"米");
return random;
}
//蛙泳
public int breastStroke(){
//定义随机数,输出蛙泳游出多少米
int random=new java.util.Random().nextInt(1500);
System.out.println(this.getName()+"蛙泳泳姿已游出"+random+"米");
return random;
}
}
想象一下,经常有新闻/视频+留言版这种常见的网页形式,现在我们用控制台(console)来模拟这种网页,在console中,首先2名足球明星、2名篮球明星、1名游泳明星登场,然后明星展示才艺,最后粉丝表达感情。
要求用面向对象的思想来实现这一功能。
2. 思路(转化成backlog)
(1)各位明星都是各领域的运动员,他们都属于运动员,而运动员又是人类,那么我们设计的时候,设计两次继承,人类->运动员->各领域运动员。
(2)不同领域的运动员,他们所从事的项目有其特别性,比如足球篮球以进球为胜负标准,田径一般以时间、长度或高度为胜负标准,因此他们的行为也各不相同,比如足球篮球有射门或投篮的行为,田径运动员有强力冲刺、跳跃的行为,但相似的项目又有类似的行为,因此,我们用接口来模拟这种行为的多样性。
(3) 粉丝继承于人类,他们对喜欢的明星很喜爱,对不喜欢的明星黑得体无完肤。
3. 类的设计(转化成具体的Process)(类图可以手画)
由于时间原因,类的设计较好的体现了继承和多态的思想,但没有很好的体现封装,同学们可以在设计的时候补齐这一块。
代码文件解释:
(1)Person:人类,抽象类
(2)Athlete:运动员类,继承自Person
(3)GoalAthlete:接口,具备得分行为的运动员,体现多态的思想
(4)SportsFan:粉丝类,继承自Person
(5)SoccerAthlete:足球运动员,继承自Athlete,实现GoalAthlete接口
BasketBallAthlete:篮球运动员,继承自Athlete,实现GoalAthlete接口
Swimmer:游泳运动员,继承自Athlete
图注:实线箭头是继承关系,虚线箭头是接口实现,斜体的是抽象对象或抽象方法。
附:代码导入方法:
1. 新建java工程,在src上右键,选择import;
2. 选择File System,选择代码所在的目录,选中左侧的文件夹,确保所有.java文件被选中,点finish。
1.package intermediateDemo_OOP;
public class Athlete extends Person {
private String value;//身价
private String specialTechnique;//特别的技能
public Athlete(String myValue, String mySpecialTechnique,String myName, int myAge, char myGender){
super(myName, myAge, myGender);//显示调用父类的构造函数
value=myValue;
specialTechnique=mySpecialTechnique;
}
@Override
//重写父类的getName方法
public String getName(){
return super.getName();
}
//获取特殊技能
public String getSpecialTechnique(){
return this.specialTechnique;
}
@Override
//重写父类的抽象方法
public void think() {
System.out.println("竞技就是我的灵魂,永远追求更完美的自己!");
}
//问好
public void sayHello(String specialHello){
System.out.println(specialHello);
}
//秀一下
public void showOff(String specialShowOff){
System.out.println("容我上场之前亮个相:"+specialShowOff);
}
}
2.
package intermediateDemo_OOP;
public class BasketBallAthlete extends Athlete implements GoalAthlete {
private String strongHand;//惯用手
private String club;//所在俱乐部
//构造函数
public BasketBallAthlete(String myHeavyFoot, String myclub,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){
super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类构造函数
strongHand=myHeavyFoot;
club=myclub;
}
@Override
//重写分类方法
public String getName(){
return super.getName();
}
@Override
//重写接口GoalAthlete的方法
public void shoot() {
System.out.println(this.getName()+"出手投篮!");
}
@Override
//重写接口GoalAthlete的方法
public void goal() {
//定义一个随机数,根据随机数的值,来决定是否得分
int random=new java.util.Random().nextInt(3);
if(random==0){
System.out.println(this.getName()+"三不沾,空气在叹息!");
}else if (random==1){
System.out.println(this.getName()+"打铁!");
}else if(random==2){
System.out.println(this.getName()+"2分入账!");
}else {
System.out.println(this.getName()+"3分远投命中!");
}
}
}
3.
package intermediateDemo_OOP;
public interface GoalAthlete {
public void shoot();
public void goal();
}
4.
package intermediateDemo_OOP;
public abstract class Person {
private String name;
private int age;
private char gender;
//构造函数
public Person(String myName, int myAge, char myGender){
name=myName;
age=myAge;
gender=myGender;
}
//获取名字
public String getName(){
return this.name;
}
//行走,子类可以不重写
public void walk(){
System.out.println("走两步!");
}
//笑,子类可以不重写
public void smile(){
System.out.print("来自抽象人类的呵呵~");
}
//思考,抽象方法,子类必须对其进行重写
public abstract void think();
}
5.
package intermediateDemo_OOP;
import java.util.concurrent.ThreadLocalRandom;
public class PersonTest {
public static void main(String[] args){
/*
* 1. 实例化C罗,梅西,科比,詹姆斯和宁泽涛几位运动员
* 2. 实例化小C,小梅,小科,小詹,小红几位粉丝
* 3. 各位体育明星展现才能
* 4. 粉丝表达情感
* */
//1. 实例化4个运动员
SoccerAthlete CR7=new SoccerAthlete("右脚", "皇家马德里","8000万英镑", "跳水,电梯球", "C罗", 30, '男');
SoccerAthlete Messi=new SoccerAthlete("左脚", "巴塞罗那","未知", "踢球迷,盘带", "梅西", 28, '男');
BasketBallAthlete Kobe=new BasketBallAthlete("右手", "湖人","3000万美元", "体味凌晨四点的洛杉矶", "科比", 37, '男');
BasketBallAthlete James=new BasketBallAthlete("右手", "骑士","5000万美元", "走步上篮", "詹姆斯", 31, '男');
Swimmer Ning=new Swimmer("自由泳", "中国", "500万人民币", "帅", "宁泽涛", 22, '男');
//2. 实例化4个粉丝
SportsFan littleC=new SportsFan("足球", "C罗", "梅西","小C", 28, '男');
SportsFan littleMei=new SportsFan("足球", "梅西", "C罗","小梅", 26, '男');
SportsFan littleKe=new SportsFan("篮球", "科比", "詹姆斯","小科", 30, '男');
SportsFan littleZhan=new SportsFan("篮球", "詹姆斯", "科比","小詹", 26, '男');
SportsFan littleHong=new SportsFan("无", "宁泽涛", "澳洲小鲜肉","小红", 21, '女');
//3. 明星展现才能
//各位明星走一个
System.out.println("请各位明星给大家问个好~");
System.out.println("-------------------------");
CR7.sayHello(CR7.getName()+":我用清扬,没有头屑!我最擅长"+CR7.getSpecialTechnique());
Messi.sayHello(Messi.getName()+":求别黑我大红蓝巴萨!我最擅长"+Messi.getSpecialTechnique());
Kobe.sayHello(Kobe.getName()+":你见过凌晨四点的洛杉矶吗?我最擅长"+Kobe.getSpecialTechnique());
James.sayHello(James.getName()+":OOOOOOOOO~我最擅长"+James.getSpecialTechnique());
Ning.sayHello(Ning.getName()+":大家好,我是"+Ning.getName()+"我最大的特点是:"+Ning.getSpecialTechnique());
System.out.println("----------割--------------");
//明星展示才艺
System.out.println("请各位明星秀一下~");
System.out.println("-------------------------");
System.out.println(CR7.getName()+"来了");
CR7.showOff("看我发型!");
CR7.shoot();
CR7.goal();
System.out.println("\n"+Messi.getName()+"来了");
Messi.showOff("看台那球迷,你别动!");
Messi.shoot();
Messi.goal();
System.out.println("\n"+Kobe.getName()+"来了");
Kobe.showOff("看我手型");
Kobe.shoot();
Kobe.goal();
System.out.println("\n"+James.getName()+"来了");
James.showOff("爱卿们平身");
James.shoot();
James.goal();
System.out.println("\n"+Ning.getName()+"来了");
Ning.breastStroke();
Ning.butterflyStroke();
System.out.println("----------割--------------");
//4. 粉丝们表达感情
System.out.println("粉丝们表达一下感情");
System.out.println("-------------------------");
System.out.println("C罗球迷走一个");
littleC.think();
littleC.love();
littleC.hate();
System.out.println("\n梅西球迷走一个");
littleMei.think();
littleMei.love();
littleMei.hate();
System.out.println("\n科密走一个");
littleKe.think();
littleKe.love();
littleKe.hate();
System.out.println("\n詹姆斯球迷走一个");
littleZhan.think();
littleZhan.love();
littleZhan.hate();
System.out.println("\n宁泽涛粉丝走一个");
littleHong.think();
littleHong.love();
littleHong.hate();
}
}
6.
package intermediateDemo_OOP;
public class SoccerAthlete extends Athlete implements GoalAthlete {
private String heavyFoot;//惯用脚
private String club;//所在俱乐部
//构造函数
public SoccerAthlete(String myHeavyFoot, String myclub,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){
super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类的构造函数
heavyFoot=myHeavyFoot;
club=myclub;
}
@Override
//重写父类的方法
public String getName(){
return super.getName();
}
@Override
//实现接口GoalAthlete的方法
public void shoot() {
System.out.println(this.getName()+"起脚射门!");
}
@Override
//实现接口GoalAthlete的方法
public void goal() {
//定义一个随机数,根据随机数的值,来决定是否得分
int random=new java.util.Random().nextInt(2);
if(random==0){
System.out.println(this.getName()+"打了飞机,球飞向宇宙!");
}else if (random==1){
System.out.println(this.getName()+"击中门框,很遗憾!");
}else{
System.out.println(this.getName()+"GOOOOOOOOOOOL!");
}
}
}
7.
package intermediateDemo_OOP;
public class SportsFan extends Person {
private String favoriteSports;
private String favoriteStar;
private String hatedStar;
public SportsFan(String myFavoriteSports, String myFavoriteStar,String myHatedStar,String myName, int myAge, char myGender){
super(myName, myAge, myGender);//显示调用父类的构造函数
favoriteSports=myFavoriteSports;
favoriteStar=myFavoriteStar;
hatedStar=myHatedStar;
}
@Override
//重写父类的抽象方法,粉丝的思维逻辑
public void think() {
System.out.println("爱就爱的深沉,恨就恨得彻底!"+this.favoriteStar+"加油");
}
//粉丝的爱
public void love(){
int saySomething=new java.util.Random().nextInt(2);
//用switch语句对随机数进行判断,然后输出话语
switch(saySomething){
case 0:
System.out.println("对"+this.favoriteStar+"爱得深沉!");
break;
case 1:
System.out.println("最爱"+this.favoriteStar);
break;
case 2:
System.out.println(this.favoriteStar+"么么哒");
default:
System.out.println(this.favoriteStar+" best");
}
}
//粉丝的恨
public void hate(){
int saySomething=new java.util.Random().nextInt(2);
//用if语句对随机数进行判断,然后输出话语
if(saySomething==0){
System.out.println("恨"+this.hatedStar+"入骨!");
}else if(saySomething==1){
System.out.println(favoriteStar+"最棒,"+hatedStar+"算个啥");
}
else {
System.out.println(hatedStar+",呵呵");
}
}
}
8.
package intermediateDemo_OOP;
public class Swimmer extends Athlete {
private String skilledType;//最擅长的泳姿
private String country;//所在国家
//构造函数
public Swimmer(String mySkilledType, String myCountry,String myValue,String mySpecialTechnique, String myName, int myAge, char myGender){
super(myValue, mySpecialTechnique, myName, myAge, myGender);//调用父类构造函数
skilledType=mySkilledType;
country=myCountry;
}
@Override
//重写父类方法
public String getName(){
return super.getName();
}
//蝶泳
public int butterflyStroke(){
//定义随机数,输出蝶泳游出多少米
int random=new java.util.Random().nextInt(500);
System.out.println(this.getName()+"蝶泳泳姿已游出"+random+"米");
return random;
}
//蛙泳
public int breastStroke(){
//定义随机数,输出蛙泳游出多少米
int random=new java.util.Random().nextInt(1500);
System.out.println(this.getName()+"蛙泳泳姿已游出"+random+"米");
return random;
}
}
相关文章推荐
- struts2 action如何在前台弹出信息提示
- 杭电ACM2060java做法(WA)
- javaweb中的转发和重定向的区别
- 几种任务调度的 Java 实现方法与比较
- java环境变量配置
- [JavaWeb基础] 020.Velocity 模板引擎简单示例
- Java之voliate, synchronized, AtomicInteger使用
- java中遍历属性字段及值
- myeclipse乱码问题总结
- Spring JDBC 执行sql并下载执行sql的数据
- Java数据库操作
- Java语言中的线程安全
- java vararg
- 异常捕获不抛出,Spring事务无法回滚
- Java内置的进制转换
- 如何来用cxf结合spring开发webservice接口
- java 银联接口开发
- java虚拟机常用命令工具
- JMS集群部署问题 java.net.ConnectException: Connection refused; No available router to destination
- SpringMvc登陆拦截器的基本使用