[JAVA100例]001、Hello,你好Java

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello Java World!");
  }
 }

[JAVA100例]002、Java流程控制
public class flowDemo{
   public static void main(String[] arges){
     int iPara1,iPara2,iEnd;
     if(arges.length!=3)
     {
       System.out.println("USE :java flowDome parameter1 parameter2 circle");
       System.out.println("parameter1 : 比较条件1,数字类型");
       System.out.println("parameter2 : 比较条件2,数字类型");
       System.out.println("circle :循环次数");
       System.out.println("ego:java flowDome 1 2 5");
       return;
     }else{
       iPara1 = Integer.parseInt(arges[0]);
       iPara2 = Integer.parseInt(arges[1]);
       iEnd = Integer.parseInt(arges[2]);
     }
     //if语句
     if(iPara2>iPara1)
     {
      System.out.println("if 条件满足!");
      System.out.println("第2个数比第1个数大!");
     }
     else
     {
      System.out.println("if 条件不满足!");
      System.out.println("第2个数比第1个数小!");
     }
     //for循环操作
     for(int i=0;i<iEnd;i++)
     {
       System.out.println("这是for 第"+i+"次循环");
     }
     //while循环操作
     int i=0;
     while(i<iEnd)
     {
      System.out.println("这是while 第"+i+"次循环");
      i++;
     }
     //do-while循环操作
     int j=0;
     do
     {
      System.out.println("这是do-while 第"+j+"次循环");
      j++;
     }while(j<iEnd);
   }
 }

[JAVA100例]003、数组数据操作
public class  myArray{
   //初始化数组变量
   char[] cNum = {'1','2','3','4','5','6','7','8','9','0'};
   char[] cStr = {'a','b','c','d','e','f','g','h',
                  'i','j','k','l','m','n','o','p',
                  'q','r','s','t','u','v','w','x','y','z'};
   int[] iMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
   String[] sMail = {"@","."};
/**
 *<br>方法说明:校验电子邮件
 *<br>输入参数:String sPara 被校验的电子邮件字符
 *<br>返回类型:boolean 如果校验的格式符合电子邮件格式返回true;否则返回false
 */  
   public boolean isMail(String sPara){
    for(int i=0;i<sMail.length;i++){
      if(sPara.indexOf(sMail[i])==-1)
        return false;     
    }
    return true;
   }
/**
 *<br>方法说明:判断是否是数字
 *<br>输入参数:String sPara。 需要判断的字符串
 *<br>返回类型:boolean。如果都是数字类型,返回true;否则返回false
 */  
   public boolean isNumber(String sPara){
     int iPLength = sPara.length();
     for(int i=0;i<iPLength;i++){
      char cTemp = sPara.charAt(i);
      boolean bTemp = false;
      for(int j=0;j<cNum.length;j++){
        if(cTemp==cNum[j]){
          bTemp = true;
          break;
        }
      }
      if(!bTemp) return false;
     }
    return true;
   }
/**
 *<br>方法说明:判断是否都是英文字符
 *<br>输入参数:String sPara。要检查的字符
 *<br>返回类型:boolean。如果都是字符返回true;反之为false
 */  
   public boolean isString(String sPara){
     int iPLength = sPara.length();
     for(int i=0;i<iPLength;i++){
      char cTemp = sPara.charAt(i);
      boolean bTemp = false;
      for(int j=0;j<cStr.length;j++){
        if(cTemp==cStr[j]){
          bTemp = true;
          break;
        }
      }
      if(!bTemp) return false;
     }
    return true;
   }
/**
 *<br>方法说明:判断是否是闰年
 *<br>输入参数:int iPara。要判断的年份
 *<br>返回类型:boolean。如果是闰年返回true,否则返回false
 */  
   public boolean chickDay(int iPara){
     return iPara%100==0&&iPara%4==0;
   }
/**
 *<br>方法说明:检查日期格式是否正确
 *<br>输入参数:String sPara。要检查的日期字符
 *<br>返回类型:int。0 日期格式正确,-1 月或这日不合要求, -2 年月日格式不正确
 */
   public int chickData(String sPara){
    boolean bTemp = false;
    //所输入日期长度不正确
    if(sPara.length()!=10) return -2;
    //获取年
    String sYear = sPara.substring(0,4);
    //判断年是否为数字
    if(!isNumber(sYear)) return -2;
    //获取月份
    String sMonth = sPara.substring(5,7);
    //判断月份是否为数字
    if(!isNumber(sMonth)) return -2;
    //获取日
    String sDay = sPara.substring(8,10);
    //判断日是否为数字
    if(!isNumber(sDay)) return -2;
    //将年、月、日转换为数字
    int iYear = Integer.parseInt(sYear);
    int iMon = Integer.parseInt(sMonth);
    int iDay = Integer.parseInt(sDay);
    if(iMon>12) return -1;
    //闰年二月处理
    if(iMon==2&&chickDay(iYear)){
      if(iDay>29) return 2;
    }else{
      if(iDay>iMonth[iMon-1]) return -1;
    }
    return 0;
   }
/**
 *<br>方法说明:主方法,测试用
 *<br>输入参数:
 *<br>返回类型:
 */
   public static void main(String[] arges){
     myArray mA = new myArray();
     //校验邮件地址
     boolean bMail = mA.isMail("
tom@163.com");
     System.out.println("1 bMail is "+bMail);
     bMail = mA.isMail("
tom@163com");
     System.out.println("2 bMail is "+bMail);
     //演示是否是数字
     boolean bIsNum = mA.isNumber("1234");
     System.out.println("1:bIsNum="+bIsNum);
     bIsNum = mA.isNumber("123r4");
     System.out.println("2:bIsNum="+bIsNum);
     //演示是否是英文字符
     boolean bIsStr = mA.isString("wer");
     System.out.println("1:bIsStr="+bIsStr);
     bIsStr = mA.isString("wer3");
     System.out.println("2:bIsStr="+bIsStr);
     //演示检查日期
     int iIsTime = mA.chickData("2003-12-98");
     System.out.println("1:iIsTime="+iIsTime);
     iIsTime = mA.chickData("2003-111-08");
     System.out.println("2:iIsTime="+iIsTime);
     iIsTime = mA.chickData("2003-10-08");
     System.out.println("3:iIsTime="+iIsTime);
     iIsTime = mA.chickData("2000-02-30");
     System.out.println("4:iIsTime="+iIsTime);
   }
 }

[JAVA100例]004、矢量(Vector)对象的操作
public class operateVector
{
/*
*<br>方法说明:生成一个4*4的二维Vector,供使用。
*<br>输入参数:
*<br>输出变量:Vector
*<br>其它说明:
*/
 public Vector buildVector(){
    Vector vTemps = new Vector();
    for(int i=0;i<4;i++){
    Vector vTemp = new Vector();
    for (int j=0;j<4;j++){
         vTemp.addElement("Vector("+i+")("+j+")");
    }
    vTemps.addElement(vTemp);
    }
    return vTemps;
 }
/*
*<br>方法说明:插入数据
*<br>输入参数:Vector vTemp 待插入的数据对象
*<br>输入参数:int iTemp 插入数据的位置
*<br>输入参数:Object oTemp 插入数据值
*<br>输出变量:Vector 结果
*<br>其它说明:如果插入位置超出实例实际的位置将返回null
*/
 public Vector insert(Vector vTemp,int iTemp,Object oTemp){
     if(iTemp>vTemp.size()){
   print("数据超界!");
   return null;
  }else{
    vTemp.insertElementAt(oTemp,iTemp);
  }
  return vTemp;
 }
/*
*<br>方法说明:移除数据
*<br>输入参数:Vector vTemp 待删除矢量对象
*<br>输入参数:int iTemp 删除数据的位置
*<br>输出变量:Vector
*<br>其它说明:如果删除超界的数据,将返回null
*/
 public Vector delete(Vector vTemp,int iTemp){
     if(iTemp>vTemp.size()){
   print("数据超界!");
   return null;
  }else{
    vTemp.removeElementAt(iTemp);
  }
  return vTemp;
 }
/*
*<br>方法说明:修改数据
*<br>输入参数:Vector vTemp 待修改矢量对象
*<br>输入参数:int iTemp 修改数据的位置
*<br>输入参数:Object oTemp 修改数据值
*<br>输出变量:Vector
*<br>其它说明:如果修改位置超界的数据,将返回null
*/
 public Vector updata(Vector vTemp,int iTemp,Object oTemp){
     if(iTemp>vTemp.size()){
   print("数据超界!");
   return null;
  }else{
    vTemp.setElementAt(oTemp,iTemp);
  }
  return vTemp;
 }
/*
*<br>方法说明:输出信息
*<br>输入参数:String sTemp 输出信息名称
*<br>输入参数:Object oTemp 输出信息值
*<br>返回变量:无
*/
 public void print(String sTemp,Vector oTemp){
     System.out.println(sTemp+"数据:");
     this.print(oTemp);
 }
/**
 *<br>方法说明:打印输出(过载)
 *<br>输入参数:Object oPara 输出的对象
 *<br>返回类型:无
 */
 public void print(Object oPara){
     System.out.println(oPara);
 }
/**
 *<br>方法说明:打印输出(过载)
 *<br>输入参数:Vector vPara 显示输出矢量对象
 *<br>返回类型:无
 */
 public void print(Vector vPara){
    for(int i=0;i<vPara.size();i++){
     System.out.println(vPara.elementAt(i));
    }
 }
/**
 *<br>方法说明:主方法,程序入口
 *<br>输入参数:String[] args
 *<br>返回类型:无
 */
 public static void main(String[] args)
 {
  operateVector ov = new operateVector();
  Vector vTemp = ov.buildVector();
  ov.print("vTemp0",vTemp);
  Vector vResult = ov.insert(vTemp,2,"添加的数据");
  ov.print("vResult",vResult);
        Vector vResultup = ov.updata(vResult,2,"修改的数据");
  ov.print("vResultmp",vResultup);
        Vector vResultnow = ov.delete(vResultup,2);
  ov.print("vResultnow",vResultnow);
 }
}
[JAVA100例]005、哈希表(Hashtable)和枚举器
public class RoleRight
 {
 private static Hashtable rightList = new Hashtable();
/**
 *<br>方法说明:初始化数据
 *<br>输入参数:
 *<br>返回类型:
 */
 public void init()
 {
    String[] accRoleList = {"admin","satrap","manager","user","guest"};
    String[] rightCodeList = {"10001","10011","10021","20011","24011"};
    for(int i=0;i<accRoleList.length;i++)
    {
      rightList.put(accRoleList[i],rightCodeList[i]);
    }
 }
/**
 *<br>方法说明:获取角色权限代码
 *<br>输入参数:String accRole 角色名称
 *<br>返回类型:String 权限代码
 */
 public String getRight(String accRole)
 {
    if(rightList.containsKey(accRole))
      return (String)rightList.get(accRole);
    else
      return null;
 }
/**
 *<br>方法说明:添加角色和代码信息
 *<br>输入参数:String accRole 角色名称
 *<br>输入参数:String rightCode 角色权限代码
 *<br>返回类型:void (无)
 */
 public void insert(String accRole,String rightCode)
 {
   rightList.put(accRole,rightCode);
 }
/**
 *<br>方法说明:删除角色权限
 *<br>输入参数:String accRole 角色名称
 *<br>返回类型:void(无)
 */
 public void delete(String accRole)
 {
   if(rightList.containsKey(accRole))
     rightList.remove(accRole);
 }
/**
 *<br>方法说明:修改角色权限代码
 *<br>输入参数:String accRole 角色名称
 *<br>输入参数:String rightCode 角色权限代码
 *<br>返回类型:void(无)
 */
 public void update(String accRole,String rightCode)
 {
   //this.delete(accRole);
   this.insert(accRole,rightCode);
 }
/**
 *<br>方法说明:打印哈希表中角色和代码对应表
 *<br>输入参数:无
 *<br>返回类型:无
 */
 public void print()
 {
  Enumeration RLKey = rightList.keys();
  while(RLKey.hasMoreElements())
  {
   String accRole = RLKey.nextElement().toString();
   print(accRole+"="+this.getRight(accRole));
  }
 }
/**
 *<br>方法说明:打印信息(过载)
 *<br>输入参数:Object oPara 打印的信息内容
 *<br>返回类型:无
 */
 public void print(Object oPara)
 {
  System.out.println(oPara);
 }
/**
 *<br>方法说明:主方法,
 *<br>输入参数:
 *<br>返回类型:
 */
 public static void main(String[] args)
 {
  RoleRight RR = new RoleRight();
  RR.init();
  RR.print();
  RR.print("___________________________");
  RR.insert("presider","10110");
  RR.print();
  RR.print("___________________________");
  RR.update("presider","10100");
  RR.print();
  RR.print("___________________________");
  RR.delete("presider");
  RR.print();
 }
 }//end:)~

public class RoleRight
 {
 private static Hashtable rightList = new Hashtable();
/**
 *<br>方法说明:初始化数据
 *<br>输入参数:
 *<br>返回类型:
 */
 public void init()
 {
    String[] accRoleList = {"admin","satrap","manager","user","guest"};
    String[] rightCodeList = {"10001","10011","10021","20011","24011"};
    for(int i=0;i<accRoleList.length;i++)
    {
      rightList.put(accRoleList[i],rightCodeList[i]);
    }
 }
/**
 *<br>方法说明:获取角色权限代码
 *<br>输入参数:String accRole 角色名称
 *<br>返回类型:String 权限代码
 */
 public String getRight(String accRole)
 {
    if(rightList.containsKey(accRole))
      return (String)rightList.get(accRole);
    else
      return null;
 }
/**
 *<br>方法说明:添加角色和代码信息
 *<br>输入参数:String accRole 角色名称
 *<br>输入参数:String rightCode 角色权限代码
 *<br>返回类型:void (无)
 */
 public void insert(String accRole,String rightCode)
 {
   rightList.put(accRole,rightCode);
 }
/**
 *<br>方法说明:删除角色权限
 *<br>输入参数:String accRole 角色名称
 *<br>返回类型:void(无)
 */
 public void delete(String accRole)
 {
   if(rightList.containsKey(accRole))
     rightList.remove(accRole);
 }
/**
 *<br>方法说明:修改角色权限代码
 *<br>输入参数:String accRole 角色名称
 *<br>输入参数:String rightCode 角色权限代码
 *<br>返回类型:void(无)
 */
 public void update(String accRole,String rightCode)
 {
   //this.delete(accRole);
   this.insert(accRole,rightCode);
 }
/**
 *<br>方法说明:打印哈希表中角色和代码对应表
 *<br>输入参数:无
 *<br>返回类型:无
 */
 public void print()
 {
  Enumeration RLKey = rightList.keys();
  while(RLKey.hasMoreElements())
  {
   String accRole = RLKey.nextElement().toString();
   print(accRole+"="+this.getRight(accRole));
  }
 }
/**
 *<br>方法说明:打印信息(过载)
 *<br>输入参数:Object oPara 打印的信息内容
 *<br>返回类型:无
 */
 public void print(Object oPara)
 {
  System.out.println(oPara);
 }
/**
 *<br>方法说明:主方法,
 *<br>输入参数:
 *<br>返回类型:
 */
 public static void main(String[] args)
 {
  RoleRight RR = new RoleRight();
  RR.init();
  RR.print();
  RR.print("___________________________");
  RR.insert("presider","10110");
  RR.print();
  RR.print("___________________________");
  RR.update("presider","10100");
  RR.print();
  RR.print("___________________________");
  RR.delete("presider");
  RR.print();
 }
 }//end:)~

[JAVA100例]006、类的继承(java100例)

class tree
{
/**
 *<br>方法说明:树的树根
 *<br>输入参数:
 *<br>返回类型:
 */
  public void root()
  {
    String sSite = "土壤中";
    String sFunction = "吸收养份";
    print("位置:"+sSite);
    print("功能:"+sFunction);
  }
/**
 *<br>方法说明:树的树干
 *<br>输入参数:
 *<br>返回类型:
 */
  public void bolo()
  {
    String sSite = "地面";
    String sFunction = "传递养份";
    print("位置:"+sSite);
    print("功能:"+sFunction);
  }
/**
 *<br>方法说明:树的树枝
 *<br>输入参数:
 *<br>返回类型:
 */
  public void branch()
  {
    String sSite = "树干上";
    String sFunction = "传递养份";
    print("位置:"+sSite);
    print("功能:"+sFunction);
  }
/**
 *<br>方法说明:树的叶子
 *<br>输入参数:
 *<br>返回类型:
 */
  public void leaf()
  {
    String sSite = "树梢";
    String sFunction = "光合作用";
    String sColor = "绿色";
    print("位置:"+sSite);
    print("功能:"+sFunction);
    print("颜色:"+sColor);
  }
/**
 *<br>方法说明:显示信息
 *<br>输入参数:Object oPara 显示的信息
 *<br>返回类型:
 */
  public void print(Object oPara)
  {
    System.out.println(oPara);
  }
/**
 *<br>方法说明:主方法
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void  main(String[] arges)
  {
    tree t = new tree();
    t.print("描述一棵树:");
    t.print("树根:");
    t.root();
    t.print("树干:");
    t.bolo();
    t.print("树枝:");
    t.branch();
    t.print("树叶:");
    t.leaf();
  }
}
/**
 * <p>Title: 柳树参数</p>
 * <p>Description: 描述柳树的参数</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: </p>
 * @author 杜江
 * @version 1.0
 */
class osier extends tree
{
 /**
 *<br>方法说明:过载树的树叶
 *<br>输入参数:
 *<br>返回类型:
 */
  public void leaf()
  {
    super.leaf();
    String sShape = "长形";
    super.print("形状:"+sShape);
  }
  /**
 *<br>方法说明:扩展树的花
 *<br>输入参数:
 *<br>返回类型:
 */
  public void flower()
  {
    print("哈哈,柳树没有花!!");
  }
/**
 *<br>方法说明:主方法
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void  main(String[] args)
  {
    osier o = new osier();
    o.print("柳树树根:");
    o.root();
    o.print("柳树树干:");
    o.bolo();
    o.print("柳树树枝:");
    o.branch();
    o.print("柳树树叶:");
    o.leaf();
    o.print("柳树花:");
    o.flower();
  }
}

[JAVA100例]007、接口和抽象类(java100例)

//接口
interface player
{
 int flag = 1;
 void play();//播放
 void pause();//暂停
 void stop();//停止
}//end :)

//抽象类
abstract class playing
{
 public void display(Object oPara)
 {
   System.out.println(oPara); 
 }
 abstract void winRun();
}//end :)

//继承了playing抽象类和实现类player接口
public class newPlay extends playing implements player
{
  public void play()
  {
    display("newPlay.play()");//这里只是演示,去掉了代码。
  }
  public void pause()
  {
     display("newPlay.pause()");//这里只是演示,去掉了代码。
  }
  public void stop()
  {
    display("newPlay.stop()");//这里只是演示,去掉了代码。
  }
  void winRun()
  {
    display("newPlay.winRun()");//这里只是演示,去掉了代码。
  }
  public static void main(String[] args)
  {
    newPlay p = new newPlay();
    p.play();
    p.pause();
    p.stop();
    p.winRun();
  }
}//end

[JAVA100例]008、类的标识和访问控制(java100例)

package e8.com;
/**
 * <p>Title: 标识符</p>
 * <p>Description: 演示标识符对类的访问控制</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: </p>
 * @version 1.0
 */
public class classDemo1
{
//公有方法
 public void mechod1()
 {
   System.out.println("这是一个公有的方法!任何类都可以访问。");
 }
//授保护的方法
 protected void mechod2()
 {
   System.out.println("这是一个受到保护的方法!只有子类可以访问。");
 }
//私有的方法
 private void mechod3()
 {
   System.out.println("这是一个私有的方法!只有类本身才可以访问。");
 }
 public static void main(String[] args){
   classDemo1 d = new classDemo1();
   d.mechod1();
   d.mechod2();
   d.mechod3();
 } 
}//end 

package e8.com;
/**
 * <p>Title: 标识符</p>
 * <p>Description: 演示标识符对类的访问控制</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: </p>
 * @version 1.0
 */
public class classPlay
{
  public static void main(String[] args){
    classDemo1 d = new classDemo1();
    d.mechod1();
    d.mechod2();
    d.mechod3();
  }
}

 package e8.net;

import e8.com.*;
/**
 * <p>Title: 标识符</p>
 * <p>Description: 演示标识符对类的访问控制</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: </p>
 * @version 1.0
 */
public class classPlay
{
  public static void main(String[] args){
    classDemo1 d = new classDemo1();
    d.mechod1();
    d.mechod2();
    d.mechod3();
  }
}

[JAVA100例]009、异常的捕获和实现自己的异常类(java100例)

/**
 * <p>Title: 捕获异常和实现自己的异常类</p>
 * <p>Description: 通过继承Exception类来实现自己的异常类。并使用try-catch来捕获这个异常。</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: </p>
 * @version 1.0
 */
class MyException extends Exception {
  public MyException() {}
  public MyException(String msg) {
    super(msg);
  }
  public MyException(String msg, int x) {
    super(msg);
    i = x;
  }
  public int val() { return i; }
  private int i;
}

public class DemoException {
/**
 *<br>方法说明:使用MyException类中默认的构造器
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void a() throws MyException {
    System.out.println(
      "Throwing MyException from a()");
    throw new MyException();
  }
/**
 *<br>方法说明:使用MyException类中带信息的构造器
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void b() throws MyException {
    System.out.println(
      "Throwing MyException from b()");
    throw new MyException("Originated in b()");
  }
/**
 *<br>方法说明:使用了MyException中有编码的构造器
 *<br>输入参数:
 *<br>返回类型:
 */
  public static void c() throws MyException {
    System.out.println(
      "Throwing MyException from c()");
    throw new MyException(
      "Originated in c()", 47);
  }
  public static void main(String[] args) {
    try {
      a();
    } catch(MyException e) {
      e.getMessage();
    }
    try {
      b();
    } catch(MyException e) {
      e.toString();
    }
    try {
      c();
    } catch(MyException e) {
      e.printStackTrace();
      System.out.println("error code: " + e.val());
    }
  }
} //end :)

[JAVA100例]010、创建一个窗体(java100例)

import javax.swing.*;
import java.awt.*;

/**
 * <p>Title: 创建自己的窗体</p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Filename: mainFrame.java</p>
 * @version 1.0
 */
public class mainFrame extends JFrame
{
/**
 *<br>方法说明:构造器,通过传递参数来完成窗体的绘制。
 *<br>输入参数:String sTitle 窗体标题
 *<br>输入参数:int iWidth 窗体的宽度
 *<br>输入参数:int iHeight 窗体的高度
 *<br>返回类型:
 */
  public mainFrame(String sTitle,int iWidth,int iHeight)
  {
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕尺寸
    ImageIcon ii = new ImageIcon("images/middle.gif");
    setTitle(sTitle);//设置窗体标题
    setIconImage(ii.getImage());//设置窗体的图标
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//设置但关闭窗体时退出程序
    setSize(iWidth,iHeight);//设置窗体大小
    int w = getSize().width;//获取窗体宽度
    int h = getSize().height;//获取窗体高度
    System.out.println("窗体宽:"+w+" 窗体高:"+h);
    int x = (dim.width-w)/2;
    int y = (dim.height-h)/2;
    setLocation(x,y);//将窗体移到屏幕中间
    setVisible(true);//显示窗体
  }
  public static void main(String[] args)
  {
    JFrame.setDefaultLookAndFeelDecorated(true);//使用最新的SWING外观
    mainFrame mF = new mainFrame("main Frame Demo",400,300);
  }
}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐