不要在finally代码块中出现return语句

       在项目中绝对不能在finally代码块中出现return语句,这是因为这种处理方式非常容易产生“误解”,会严重误导开发者。例如如下代码:

       对于这段代码,有两个问题:main方法中的doStuff方法的返回值是什么?doStuff方法永远都不会抛出异常吗?

答案是:doStuff(-1)的值是-1,doStuff(100)的值也是-1,调用doStuff方法永远都不会抛出异常,有这么神奇?原因就是我们在finally代码块中加入了return语句,而这会导致出现以下两个问题:

(1)覆盖了try代码块中的return返回值当执行doStuff(-1)时,doStuff方法产生了DataFormatException异常,catch块在捕捉此异常后直接抛出,之后代码执行到finally代码块,就会重置返回值,结果就是-1了,也就是出现了先返回,再执行finally,再重置返回值的情况。

扩展思考:是不是可以定义一个变量,在finally中修改后再return呢?代码如下:

       该方法的返回值永远是1,而不会是-1或0(为什么不会执行到“return 0”呢?原因是finally执行完毕后该方法已经有返回值了,后续代码就不会再执行了),这都是源于异常代码块的处理方式,在代码中加上try代码块就标志着运行时会有一个Throwable线程监视着该方法的运行,若出现异常,则交由异常逻辑处理。

       方法是在栈内存中运行的,并且会按照“先进后出”的原则执行,main方法调用了doStuff方法,则main方法在下层,doStuff在上层,当doStuff方法执行完“return a”时,此方法的返回值已经确定是in类型1(a变量的值,注意基本类型都是值拷贝,而不是引用),此后finally代码块再修改a的值已经与doStuff返回者没有任何关系了,因此该方法永远都会返回1。 

       继续追问:那是不是可以在finally代码块中修改引用类型的属性以达到修改返回值的效果呢?代码如下:

       此方法的返回值永远都是name为李四的Person对象,原因是Person是一个引用对象,在try代码块中的返回值是Person对象的地址,finally中再修改那当然会是李四了。

(2)屏蔽异常

       为什么明明把异常throw出去了,但main方法却捕捉不到呢?这是因为异常线程在监视到有异常发生时,就会登记当前的异常类型为DataFormatException,但是当执行器执行finally代码块时,则会重新为doStuff方法赋值,也就是告诉调用者“该方法执行正确,没有产生异常,返回值是1”,于是乎,异常神奇的消失了,其简化代码如下所示: 

     上面finally代码块中的return已经告诉JVM:doSomething方法正常执行结束,没有异常,所以main方法就不可能获得任何异常信息了。这样的代码会使可读性大大降低,增加了修改的难度。

      在finally中处理return返回值,代码看上去很完美,都符合逻辑,但是执行起来就会产生逻辑错误,最重要的一点是finally是用来做异常的收尾处理的,一旦加上了return语句就会让程序的复杂度徒然提升,而且会产生一些隐蔽性非常高的错误。与return语句相似,System 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package com.wsy.dao; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import com.wsy.model.Back; import com.wsy.model.BookInfo; import com.wsy.model.BookType; import com.wsy.model.Borrow; import com.wsy.model.Operater; import com.wsy.model.Order; import com.wsy.model.OrderAndBookInfo; import com.wsy.model.Reader; import com.wsy.model.user; public class Dao { protected static String dbClassName = "com.mysql.jdbc.Driver"; protected static String dbUrl = "jdbc:mysql://localhost:3306/mysql"; protected static String dbUser = "root"; protected static String dbPwd = ""; protected static String second = null; private static Connection conn = null; private Dao() { try { if (conn == null) { Class.forName(dbClassName); conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); } else return; } catch (Exception ee) { ee.printStackTrace(); } } private static ResultSet executeQuery(String sql) { try { if(conn==null) new Dao(); return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); return null; } finally { } } private static int executeUpdate(String sql) { try { if(conn==null) new Dao(); return conn.createStatement().executeUpdate(sql); } catch (SQLException e) { System.out.println(e.getMessage()); //if(e.getMessage().equals("[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]DELETE 语句与 COLUMN REFERENCE 约束 'FK_TB_BORRO_REFERENCE_TB_BOOKI' 冲突。该冲突发生于数据库 'db_library',表 'tb_borrow', column 'bookISBN'。")) return -1; } finally { } } public static void close() { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }finally{ conn = null; } } /* * 管理员登录方法 */ public static Operater check(String name, String password) { int i = 0; Operater operater=new Operater(); String sql = "select * from tb_operator where name='" + name + "' and password='" + password + "'and admin=1"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { String names = rs.getString(1); operater.setId(rs.getString("id")); operater.setName(rs.getString("name")); operater.setGrade(rs.getString("admin")); operater.setPassword(rs.getString("password")); if (names != null) { i = 1; } } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return operater; } /* * 查询类别方法 */ public static List selectBookCategory() { List list=new ArrayList(); String sql = "select * from tb_bookType"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookType bookType=new BookType(); bookType.setId(rs.getString("id")); bookType.setTypeName(rs.getString("typeName")); bookType.setDays(rs.getString("days")); bookType.setFk(rs.getString("fk")); list.add(bookType); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static List selectBookCategory(String bookType) { List list=new ArrayList(); String sql = "select days from tb_bookType where typeName='"+bookType+"'"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookType type=new BookType(); type.setDays(rs.getString("days")); list.add(type); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } /* * 图书类别表相关操作 * */ public static int InsertBookType(String bookTypeName,String days,Double fk){ int i=0; try{ String sql="insert into tb_bookType(typeName,days,fk) values('"+bookTypeName+"','"+days+"',"+fk+")"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } return i; } public static int UpdatebookType(String id,String typeName,String days,String fk){ int i=0; try{ String sql="update tb_bookType set typeName='"+typeName+"',days='"+days+"',fk='"+fk+"' where id='"+id+"'"; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } // public static int DelbookType(String id){ // int i=0; // try{ // String sql="delete from tb_bookType where id='"+id+"'"; // //System.out.println(sql); // i=Dao.executeUpdate(sql); // }catch(Exception e){ // e.printStackTrace(); // } // Dao.close(); // return i; // } public static List selectBookTypeFk(String bookType) {//取每种书超过规定时间罚款金额 List list=new ArrayList(); String sql = "select * from tb_bookType where typeName='"+bookType+"'"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookType type=new BookType(); type.setFk(rs.getString("fk")); type.setDays(rs.getString("days")); list.add(type); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } /* * 图书信息表相关操作 */ /* * 插入图书信息方法 */ public static int Insertbook(String ISBN,String typeId,String bookname,String writer,String translator,String publisher,Date date,Double price){ int i=0; try{ String sql="insert into tb_bookInfo(ISBN,typeId,bookname,writer,translator,publisher,date,price) values('"+ISBN+"','"+typeId+"','"+bookname+"','"+writer+"','"+translator+"','"+publisher+"','"+date+"',"+price+")"; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ System.out.println(e.getMessage()); } Dao.close(); return i; } /* * 查询图书相关信息 * */ public static List selectBookInfo() { List list=new ArrayList(); String sql = "select * from tb_bookInfo"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(rs.getString("ISBN")); bookinfo.setTypeid(rs.getString("typeid")); bookinfo.setBookname(rs.getString("bookname")); bookinfo.setWriter(rs.getString("writer")); bookinfo.setTranslator(rs.getString("translator")); bookinfo.setPublisher(rs.getString("publisher")); bookinfo.setDate(rs.getDate("date")); bookinfo.setPrice(rs.getDouble("price")); list.add(bookinfo); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static List selectBookInfo(String ISBN) { List list=new ArrayList(); String sql = "select * from tb_bookInfo where ISBN='"+ISBN+"'"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(rs.getString("ISBN")); bookinfo.setTypeid(rs.getString("typeid")); bookinfo.setBookname(rs.getString("bookname")); bookinfo.setWriter(rs.getString("writer")); bookinfo.setTranslator(rs.getString("translator")); bookinfo.setPublisher(rs.getString("publisher")); bookinfo.setDate(rs.getDate("date")); bookinfo.setPrice(rs.getDouble("price")); list.add(bookinfo); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } /* * 修改图书信息方法 */ public static int Updatebook(String ISBN,String typeId,String bookname,String writer,String translator,String publisher,Date date,Double price){ int i=0; try{ String sql="update tb_bookInfo set ISBN='"+ISBN+"',typeId='"+typeId+"',bookname='"+bookname+"',writer='"+writer+"',translator='"+translator+"',publisher='"+publisher+"',date='"+date+"',price="+price+" where ISBN='"+ISBN+"'"; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } // /* // * 删除图书信息方法 // */ // public static int Delbook(String ISBN){ // int i=0; // try{ // String sql="delete from tb_bookInfo where ISBN='"+ISBN+"'"; // //System.out.println(sql); // i=Dao.executeUpdate(sql); // }catch(Exception e){ // e.printStackTrace(); // // } // Dao.close(); // return i; // } /* * 对读者信息表执行的相关操作 */ public static int InsertReader(String name,String sex,String age,String identityCard,Date date,String maxNum,String tel,Double keepMoney,String zj,String zy,Date bztime,String ISBN){ int i=0; try{ String sql="insert into tb_reader(name,sex,age,identityCard,date,maxNum,tel,keepMoney,zj,zy,bztime,ISBN) values('"+name+"','"+sex+"','"+age+"','"+identityCard+"','"+date+"','"+maxNum+"','"+tel+"',"+keepMoney+",'"+zj+"','"+zy+"','"+bztime+"','"+ISBN+"')"; System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static List selectReader() { List list=new ArrayList(); String sql = "select * from tb_reader"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Reader reader=new Reader(); //reader.setId(rs.getString("id")); reader.setName(rs.getString("name")); reader.setSex(rs.getString("sex")); reader.setAge(rs.getString("age")); reader.setIdentityCard(rs.getString("identityCard")); reader.setDate(rs.getDate("date")); reader.setMaxNum(rs.getString("maxNum")); reader.setTel(rs.getString("tel")); reader.setKeepMoney(rs.getDouble("keepMoney")); reader.setZj(rs.getInt("zj")); reader.setZy(rs.getString("zy")); reader.setISBN(rs.getString("ISBN")); reader.setBztime(rs.getDate("bztime")); list.add(reader); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static List selectReader(String readerISBN) { List list=new ArrayList(); String sql = "select * from tb_reader where ISBN='"+readerISBN+"'"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Reader reader=new Reader(); reader.setName(rs.getString("name")); reader.setSex(rs.getString("sex")); reader.setAge(rs.getString("age")); reader.setIdentityCard(rs.getString("identityCard")); reader.setDate(rs.getDate("date")); reader.setMaxNum(rs.getString("maxNum")); reader.setTel(rs.getString("tel")); reader.setKeepMoney(rs.getDouble("keepMoney")); reader.setZj(rs.getInt("zj")); reader.setZy(rs.getString("zy")); reader.setISBN(rs.getString("ISBN")); reader.setBztime(rs.getDate("bztime")); list.add(reader); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static int UpdateReader(String id,String name,String sex,String age,String identityCard,Date date,String maxNum,String tel,Double keepMoney,String zj,String zy,Date bztime,String ISBN){ int i=0; try{ String sql="update tb_reader set name='"+name+"',sex='"+sex+"',age='"+age+"',identityCard='"+identityCard+"',date='"+date+"',maxNum='"+maxNum+"',tel='"+tel+"',keepMoney="+keepMoney+",zj='"+zj+"',zy='"+zy+"',bztime='"+bztime+"'where ISBN='"+ISBN+"'"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static int DelReader(String ISBN){ int i=0; try{ String sql="delete from tb_reader where ISBN='"+ISBN+"'"; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } /* * 对订购信息表操作 */ public static int InsertBookOrder(String ISBN,Date date,String number,String operator,String checkAndAccept,Double zk){ int i=0; try{ String sql="insert into tb_order(ISBN,date,number,operator,checkAndAccept,zk) values('"+ISBN+"','"+date+"','"+number+"','"+operator+"',"+checkAndAccept+",'"+zk+"')"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static List selectBookOrder() { List list=new ArrayList(); String sql = "SELECT * FROM tb_order a INNER JOIN tb_bookInfo b ON a.ISBN = b.ISBN"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { OrderAndBookInfo order=new OrderAndBookInfo(); order.setISBN(rs.getString(1)); order.setOrderdate(rs.getDate(2)); order.setNumber(rs.getString(3)); order.setOperator(rs.getString(4)); order.setCheckAndAccept(rs.getString(5)); order.setZk(rs.getDouble(6)); order.setTypeId(rs.getString(8)); order.setBookname(rs.getString(9)); order.setWriter(rs.getString(10)); order.setTraslator(rs.getString(11)); order.setPublisher(rs.getString(12)); order.setDate(rs.getDate(13)); order.setPrice(rs.getDouble(14)); list.add(order); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static List selectBookOrder(String ISBN) { List list=new ArrayList(); String sql = "SELECT * FROM tb_order where ISBN='"+ISBN+"'"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Order order=new Order(); order.setISBN(rs.getString("ISBN")); order.setDate(rs.getDate("date")); order.setNumber(rs.getString("number")); order.setOperator(rs.getString("operator")); order.setZk("zk"); order.setCheckAndAccept("checkAndAccept"); list.add(order); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static int UpdateCheckBookOrder(String ISBN){ int i=0; try{ String sql="update tb_order set checkAndAccept=0 where ISBN='"+ISBN+"'"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } /* * 对借阅表进行操作 */ public static int InsertBookBorrow(String bookISBN,String readerISBN,String operatorId,Timestamp borrowDate,Timestamp backDate){ int i=0; try{ String sql="insert into tb_borrow(bookISBN,readerISBN,operatorId,borrowDate,backDate)values('"+bookISBN+"','"+readerISBN+"','"+operatorId+"','"+borrowDate+"','"+backDate+"')"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static List selectBorrow(String readerISBN) { List list=new ArrayList(); String sql = "select * from tb_borrow where readerISBN='"+readerISBN+"'"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Borrow borrow=new Borrow(); borrow.setId(rs.getInt("id")); borrow.setBookISBN(rs.getString("bookISBN")); borrow.setReaderISBN(rs.getString("readerISBN")); borrow.setBorrowDate(rs.getString("borrowDate")); borrow.setBackDate(rs.getString("backDate")); borrow.setBookName(rs.getString("borrowBookName")); list.add(borrow); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } /* * 查询还书内容,tb_bookinfo tb_reader tb_borrow之间的查询 */ public static List selectBookBack(String readerISBN) { List list=new ArrayList(); String sql = "SELECT a.ISBN AS bookISBN, a.bookname, a.typeId ,b.id,b.operatorId, b.borrowDate, b.backDate, c.name AS readerName, c.ISBN AS readerISBN FROM tb_bookInfo a INNER JOIN tb_borrow b ON a.ISBN = b.bookISBN INNER JOIN tb_reader c ON b.readerISBN = c.ISBN WHERE (c.ISBN = '"+readerISBN+"' and isback=1)"; System.out.println(sql); ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { Back back=new Back(); back.setBookISBN(rs.getString("bookISBN")); back.setBookname(rs.getString("bookname")); back.setTypeId(rs.getInt("typeId")); back.setOperatorId(rs.getString("operatorId")); back.setBorrowDate(rs.getString("borrowDate")); back.setBackDate(rs.getString("backDate")); back.setReaderName(rs.getString("readerName")); back.setReaderISBN(rs.getString("readerISBN")); back.setId(rs.getInt("id")); list.add(back); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static int UpdateBookBack(String bookISBN,String readerISBN,int id){//归还图书操作 int i=0; try{ String sql="update tb_borrow set isback=0 where bookISBN='"+bookISBN+"'and readerISBN='"+readerISBN+"' and id="+id+""; System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } //new public static List selectbookserch() { List list=new ArrayList(); String sql = "select * from tb_bookInfo"; ResultSet s = Dao.executeQuery(sql); try { while (s.next()) { BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(s.getString(1)); bookinfo.setTypeid(s.getString(2)); bookinfo.setBookname(s.getString(3)); bookinfo.setWriter(s.getString(4)); bookinfo.setTranslator(s.getString(5)); bookinfo.setPublisher(s.getString(6)); bookinfo.setDate(s.getDate(7)); bookinfo.setPrice(s.getDouble(8)); list.add(bookinfo); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static List selectbookmohu(String bookname){ List list=new ArrayList(); String sql="select * from tb_bookInfo where bookname like '%"+bookname+"%'"; System.out.print(sql); ResultSet s=Dao.executeQuery(sql); try { while(s.next()){ BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(s.getString(1)); bookinfo.setTypeid(s.getString(2)); bookinfo.setBookname(s.getString(3)); bookinfo.setWriter(s.getString(4)); bookinfo.setTranslator(s.getString(5)); bookinfo.setPublisher(s.getString(6)); bookinfo.setDate(s.getDate(7)); bookinfo.setPrice(s.getDouble(8)); list.add(bookinfo); } } catch (SQLException e) { // TODO 自动生成 catch e.printStackTrace(); } return list; } public static List selectbookmohuwriter(String writer){ List list=new ArrayList(); String sql="select * from tb_bookInfo where writer like '%"+writer+"%'"; System.out.print(sql); ResultSet s=Dao.executeQuery(sql); try { while(s.next()){ BookInfo bookinfo=new BookInfo(); bookinfo.setISBN(s.getString(1)); bookinfo.setTypeid(s.getString(2)); bookinfo.setBookname(s.getString(3)); bookinfo.setWriter(s.getString(4)); bookinfo.setTranslator(s.getString(5)); bookinfo.setPublisher(s.getString(6)); bookinfo.setDate(s.getDate(7)); bookinfo.setPrice(s.getDouble(8)); list.add(bookinfo); } } catch (SQLException e) { // TODO 自动生成 catch e.printStackTrace(); } return list; } public static int Insertoperator(String name,String sex,int age,String identityCard,Date workdate,String tel,String password){ int i=0; try{ String sql="insert into tb_operator(name,sex,age,identityCard,workdate,tel,password) values('"+name+"','"+sex+"',"+age+",'"+identityCard+"','"+workdate+"','"+tel+"','"+password+"')"; System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static List selectuser() { List list=new ArrayList(); String sql = "select id,name,sex,age,identityCard,workdate,tel,password from tb_operator where admin=0"; ResultSet rs = Dao.executeQuery(sql); try { while (rs.next()) { user user=new user(); user.setId(rs.getInt(1)); user.setName(rs.getString(2)); user.setSex(rs.getString(3)); user.setAge(rs.getInt(4)); user.setIdentityCard(rs.getString(5)); user.setWorkdate(rs.getDate(6)); user.setTel(rs.getString(7)); user.setPassword(rs.getString(8)); list.add(user); } } catch (Exception e) { e.printStackTrace(); } Dao.close(); return list; } public static int Deluser(int id){ int i=0; try{ String sql="delete from tb_operator where id='"+id+"'"; //System.out.println(sql); i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static int Updateuser(int id,String name,String sex,int age,String identityCard,Date workdate,String tel,String password){ int i=0; try{ String sql="update tb_operator set name='"+name+"',sex='"+sex+"',age="+age+",identityCard='"+identityCard+"',workdate='"+workdate+"',tel='"+tel+"',password='"+password+"' where id='"+id+"'"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } public static int Updatepass(String password,String name){ int i=0; try{ String sql="update tb_operator set password='"+password+"' where name='"+name+"'"; i=Dao.executeUpdate(sql); }catch(Exception e){ e.printStackTrace(); } Dao.close(); return i; } }
net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类函数的重写。为了适应需要。 6.如果在一个B/S结构的系统需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array) { temp = array ; array = array[j] ; array[j] = temp ; } } } 9.描述一下C#索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型。 10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i < Num + 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - I ; } } System.Console.WriteLine(Sum.ToString()); System.Console.ReadLine() ; 11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。 12.在下面的例子里 using Sy
第2章(\代码\第02章) • sample01.htm 将JavaScript代码插入在<head>标签与</head>标签之间 • sample02.htm 将JavaScript代码放在了<body>标签与</body>标签之间 • sample03.htm JavaScript与HTML混合执行 • sample04.htm 在同一个网页使用不同脚本语言 • sample05.htm 判断浏览器对JavaScript版本的支持情况 • sample06.htm 引用外部JavaScript • sample07.htm 在同一个HTML文档多次引用外部脚本文件 • sample08.htm 使用外部脚本文件和嵌入的JavaScript代码 • sample09.htm 边加载边解析的JavaScript代码 • sample10.htm 先加载后解析的JavaScript代码 • sample11.htm 单行注释语句 • sample12.htm 多行注释语句 • sample13.htm 使用HTML注释语句隐藏JavaScript代码 • sample14.htm 提示用户浏览器不支持客户端脚本语言 • sample15.htm 直接执行的JavaScript代码 • sample16.htm 直接调用函数 • sample17.htm 使用“javascript:”语句调用函数或方法 • sample18.htm 通过事件调用JavaScript代码 • sample19.htm 一段错误的JavaScript代码(调试用) 第3章(\代码\第03章) • sample01.htm 转换成数字型 第4章(\代码\第04章) • sample01.htm 字符串直接量 • sample02.htm 使用转义字符 • sample03.htm 数组直接量的使用方法 • sample04.htm 数组直接量 • sample05.htm 函数直接量的使用方法 • sample06.htm 对象直接量 第5章(\代码\第05章) • sample01.htm 全局变量 • sample02.htm 在不同的语句使用全局变量 • sample03.htm 局部变量的使用方式 • sample04.htm 在函数体定义全局变量 • sample05.htm 使用没有定义的变量 • sample06.htm 重复定义变量 • sample07.htm 引用未赋值的变量 • sample08.htm 变量的优先级 • sample09.htm 随处定义的变量 • sample10.htm 随处定义的变量 • sample11.htm 嵌套函数变量的有效范围 • sample12.htm 变量没有语句的限制 • sample13.htm 常量的使用 第6章(\代码\第06章) • sample01.htm 先使用后递增 • sample02.htm 先递增后使用 • sample03.htm 先使用后递减 • sample04.htm 先递减后使用 • sample05.htm 字符串运算符 • sample06.htm 逻辑与运算符 • sample07.htm 逗号运算符 • sample08.htm 使用delete运算符删除变量 • sample09.htm 使用delete运算符删除对象属性 • sample10.htm 删除对象 • sample11.htm 使用delete运算符删除数组元素 • sample12.htm in运算符在对象的使用 • sample13.htm in运算符在数组的使用 • sample14.htm instanceof运算符 • sample15.htm new运算符 • sample16.htm this运算符 • sample17.htm this运算符 • sample18.htm void运算符 第7章(\代码\第07章) • sample01.htm 单支选择的if语句 • sample02.htm if…else语句 • sample03.htm if…else if语句 • sample04.htm if…else if…else语句 • sample05.htm if语句的嵌套 • sample06.htm if语句的嵌套(多次嵌套) • sample07.htm switch语句 • sample08.htm switch语句(省略default语句) • sample09.htm switch语句(不能省略的break语句) • sample10.htm for语句 • sample11.htm 逗号运算符与for语句的结合使用 • sample12.htm while语句 • sample13.htm do…while语句 • sample14.htm do…while语句与while语句的区别 • sample15.htm 遍历对象属性和数组元素 • sample16.htm 使用for each…in语句遍历对象属性和数组元素 • sample17.htm 对象的引用 • sample18.htm with语句 • sample19.htm with语句的等价代码 • sample20.htm label语句 • sample21.htm break语句 • sample22.htm 在嵌套的循环语句使用break语句 • sample23.htm label语句与break语句相结合 • sample24.htm continue语句 • sample25.htm label语句与continue语句相结合 • sample26.htm 抛出异常 • sample27.htm 捕捉异常(捕捉使用throw语句抛出的异常) • sample28.htm 捕捉异常(捕捉JavaScript产生的异常) • sample29.htm 抛出不同的异常 • sample30.htm 抛出不同的异常(多catch语句) • sample31.htm finally语句 • sample32.htm 空语句 • sample33.htm return语句 第8章(\代码\第08章) • sample01.htm 使用对象直接量创建自定义对象 • sample02.htm 使用对象直接量创建有方法的自定义对象 • sample03.htm 使用自定义构造函数创建对象 • sample04.htm 使用带参数的构造函数创建对象 • sample05.htm 创建对象时传递不完整的参数 • sample06.htm 使用有缺省值的构造函数创建对象 • sample07.htm 使用带方法的构造函数创建对象 • sample08.htm 使用带方法的构造函数创建对象 • sample09.htm 遍历对象属性 • sample10.htm 遍历对象属性并获得属性值 • sample11.htm 遍历对象属性和方法 • sample12.htm 遍历对象属性和方法时进行判断 • sample13.htm 遍历对象属性值 • sample14.htm 索引对象属性 • sample15.htm 添加对象属性 • sample16.htm 删除对象属性 • sample17.htm 删除对象属性 • sample18.htm 将对象赋值给对象属性 • sample19.htm 将对象赋值给对象属性 • sample20.htm 添加方法 • sample21.htm 删除方法 • sample22.htm 引用原型对象 • sample23.htm 继承属性 • sample24.htm 设置继承的属性值 • sample25.htm 通过原型对象修改对象属性 • sample26.htm 通过原型对象添加对象属性 • sample27.htm 本地属性与继承属性 • sample28.htm 灵活定义属性值的方式 • sample29.htm 在构造函数使用全局变量 • sample30.htm 在继承使用全局变量 • sample31.htm 在继承使用全局变量(一种解决办法) 第9章(\代码\第09章) • sample01.htm 布尔对象与布尔值 • sample02.htm 布尔值隐式转换为布尔对象 • sample03.htm 布尔值与布尔对象的区别 • sample04.htm 复制一个布尔对象 • sample05.htm 将日期对象的日期部分和时间部分转换成字符串 • sample06.htm 将日期部分转换为字符串 • sample07.htm 将时间部分转换为字符串 • sample08.htm 将时间部分转换为字符串 • sample09.htm 获取日期对象日期部分 • sample10.htm 获取日期对象时间部分 • sample11.htm 以毫秒表示法设置和返回日期对象的毫秒表示法 • sample12.htm 获得当前时间的毫秒表示 • sample13.htm 获得指定时间的毫秒表示 • sample14.htm 日期之差 • sample15.htm 求圆的面积 • sample16.htm 数字对象与数字 • sample17.htm 字符串长度 • sample18.htm 创建字符串 • sample19.htm 字符串与Unicode编码 • sample20.htm 返回字符串的一个字符 • sample21.htm 通过字符串的起始位置和结束位置来获得子字符串 • sample22.htm slice()方法的使用 • sample23.htm substr()方法的使用 • sample24.htm 查找子字符串在字符串的位置 • sample25.htm 统计一个字符串在另一个字符串出现的次数 • sample26.htm 使用正则表达式搜索子字符串 • sample27.htm 替换使用字符串查找到的子字符串 • sample28.htm 扩展字符串的匹配方式 • sample29.htm 使用正则表达式匹配要替换的子字符串 • sample30.htm 更多的替换字符串 • sample31.htm 将字符串分割成数组 • sample32.htm 转换大小写 • sample33.htm 与HTML相关的方法 • sample34.htm 字符串比较 • sample35.htm 修改字符串的某一个字符 • sample36.htm 创建Object对象 • sample37.htm 返回对象的构造函数 • sample38.htm 判断对象的类型 • sample39.htm 执行字符串JavaScript代码 • sample40.htm 判断对象属性是否为自有属性 • sample41.htm 判断一个对象是否是另一个对象的原型对象 • sample42.htm 判断对象的属性是否可以被枚举 • sample43.htm 监视属性值的变化情况 第10章(\代码\第10章) • sample01.htm 直接调用函数 • sample02.htm 将函数返回值赋值给对象属性 • sample03.htm 将函数的返回值作为数据在表达式进行运算 • sample04.htm 直接将函数的返回值输出 • sample05.htm 通过事件调用函数 • sample06.htm 递归调用函数 • sample07.htm 递归调用函数(使用临时的函数名) • sample08.htm 传递参数的方法 • sample09.htm 传递参数个数多于函数定义的参数个数 • sample10.htm 传递参数个数少于函数定义的参数个数 • sample11.htm 传递参数个数少于函数定义的参数个数(使用默认值) • sample12.htm Arguments对象的使用方法 • sample13.htm Arguments对象的使用方法 • sample14.htm 实际传送的参数个数和参数值 • sample15.htm 定义不确定参数个数的函数 • sample16.htm 使用callee属性递归调用函数 • sample17.htm 判断参数个数是否正确 • sample18.htm 引用原型对象 • sample19.htm 查看构造函数名 • sample20.htm 判断函数调用情况 • sample21.htm 使用apply()方法将函数作为对象的方法调用 • sample22.htm 使用call()方法将函数作为对象的方法调用 • sample23.htm 函数的自定义属性 • sample24.htm 置换图片 • sample25.htm 检测一个值是否是非数字 • sample26.htm 转换成整数 • sample27.htm 转换成整数(使用不同进制) • sample28.htm 字符串编码与解码 • sample29.htm URI编码与解码 • sample30.htm URI组件编码与解码 第11章(\代码\第11章) • sample01.htm 创建空数组 • sample02.htm 创建数组的同时为数组元素赋值 • sample03.htm 创建指定长度的数组 • sample04.htm 将字符串分割成数组 • sample05.htm 数组元素的值 • sample06.htm 输出数组的所有元素 • sample07.htm 输出数组的所有元素(使用for循环) • sample08.htm 输出数组的所有元素(使用for each循环) • sample09.htm 数组长度 • sample10.htm 添加数组元素 • sample11.htm 通过为数组元素赋值的方法添加数组长度 • sample12.htm 删除数组元素的值 • sample13.htm 通过改变数组长度来添加和删除数组元素 • sample14.htm 创建二维数组 • sample15.htm 将数组转换成字符串 • sample16.htm 将数组转换成本地字符串 • sample17.htm 通过连接符将数组元素连接成字符串 • sample18.htm 将元素添加在数组尾部 • sample19.htm 截取数组的一部分 • sample20.htm 从前向后查找元素在数组的位置 • sample21.htm 查找值为5的元素 • sample22.htm 从后向前查找元素在数组的位置 • sample23.htm 将数组的元素颠倒排序 • sample24.htm 删除数组尾部元素 • sample25.htm 删除数组头部元素 • sample26.htm 在数组头部或尾部添加元素 • sample27.htm 在数组的任何位置添加数组元素 • sample28.htm 在数组的任何位置删除数组元素 • sample29.htm 替换数组的元素 • sample30.htm 数组元素的排序 • sample31.htm 数组元素的排序(使用函数比较) • sample32.htm 颠倒数组元素的次序 • sample33.htm 返回数组大于50的元素(使用循环) • sample34.htm 返回数组大于50的元素 • sample35.htm 查找数组的元素 • sample36.htm 输出数组的元素 • sample37.htm 判断数组的元素是否都大于50 • sample38.htm 判断数组的元素是否至少有一个大于50 • sample39.htm 返回数组所有元素的平方值 • sample40.htm 返回数组元素之和 • sample41.htm 返回数组元素之和(加上初始值) • sample42.htm 返回数组最大的元素 • sample43.htm 将二维数组转换成一维数组 • sample44.htm 返回数组元素之和 • sample45.htm 两种不同的匹配方式 • sample46.htm 两种不同的匹配方式(使用g参数) • sample47.htm 返回用于创建数组的字符串 • sample48.htm 返回数组第1个元素出现的位置 第12章(\代码\第12章) • sample01.htm 客户端对象层次 • sample02.htm 通过name属性值引用对象 • sample03.htm 通过数组下标引用对象 • sample04.htm 在HTML标签设置事件驱动 • sample05.htm 在JavaScript代码设置事件驱动 • sample06.htm 调用内置对象的方法 • sample07.htm 直接调用JavaScript代码 • sample08.htm 调用用户函数 • sample09.htm 在超链接使用事件(使用click事件) • sample10.htm 在超链接使用事件(click事件的处理代码为跳转网页的语句) • sample11.htm 在超链接使用事件(将click事件处理语句写在href属性值) • sample12.htm 事件的返回值 • sample13.htm this运算符与参数传递 • sample14.htm 鼠标移动事件 • sample15.htm 鼠标点击事件 • sample16.htm 键盘事件 • sample17.htm 限制文本框输入的字数 • sample18.htm 加载事件与卸载事件 • sample19.htm 得到焦点与失去焦点事件 • sample20.htm 提交事件与重置事件 • sample21.htm 选择事件与改变事件 第13章(\代码\第13章) • sample01.htm 警告框 • sample02.htm 确认框 • sample03.htm 提示框 • sample04.htm 状态栏的默认信息 • sample05.htm 状态栏的瞬间信息 • sample06.htm 打开一个空白窗口 • sample07.htm 打开一个有内容的窗口 • sample08.htm 在命名窗口打开文档 • sample09.htm 设置新开窗口的特征 • sample10.htm 不显示新开窗口的浏览历史 • sample11.htm 窗口名称 • sample12.htm 关闭当前窗口 • sample13.htm 在打开的窗口关闭窗口 • sample14.htm 关闭其他窗口 • sample15.htm 判断窗口是否已经关闭 • sample16.htm 对其他窗口的引用 • sample17.htm 窗口得到焦点 • sample18.htm 移动窗口 • sample19.htm 调整窗口大小 • sample20.htm 滚动文档 • sample21.htm 在状态栏显示时间 • sample22.htm 跑马灯 • sample23.htm 延时注册 • sample24.htm 计数器 • sample25.htm 框架页 • sample26.htm 内置框架 • sample27.htm 框架数量 • sample28.htm 对框架页的引用 • sample29.htm 通过框架名对框架页的引用 • sample30.htm 复杂的框架页 • sample31.htm 在框架对其他窗口的引用 • sample32.htm 操作新开窗口的数据 第14章(\代码\第14章) • sample01.htm 在网页上输出文字 • sample02.htm write()和wirteln()的区别 • sample03.htm 输出文字时的注意事项 • sample04.htm 在内置框架输入文字 • sample05.htm 在内置框架输入文字(document.open()方法的使用) • sample06.htm 测试代码 • sample07.htm 测试代码(注销document.close()语句) • sample08.htm 输出文档 • sample09.htm 不覆盖当前浏览历史记录 • sample10.htm 覆盖当前浏览历史记录 • sample11.htm 超链接颜色 • sample12.htm 网页的前景色和背景色 • sample13.htm 最后修改时间与文档URL • sample14.htm 跑马灯 • sample15.htm referrer属性的使用 • sample16.htm 文档所在域 • sample17.htm 图片信息 • sample18.htm 置换图片 • sample19.htm 置换图片(使用this引用) • sample20.htm 随机图片 • sample21.htm 随机图片(与load事件结合) • sample22.htm 提示图片不存在 • sample23.htm 查看超链接的各部分 • sample24.htm 随机广告 • sample25.htm Anchor对象和Link对象的区别 第15章(\代码\第15章) • sample01.htm Form对象的属性 • sample02.htm 验证表单数据 • sample03.htm 确认提交和重置数据 • sample04.htm 将表单提交到不同的URL • sample05.htm 限制文本框的输入字数 • sample06.htm 自动选择文本框的文字 • sample07.htm 自动定位在第一个文本框 • sample08.htm 只允许提交一次 • sample09.htm 改变按钮上的文字 • sample10.htm 获取单选框与复选框的值 • sample11.htm 限制复选框的被选择数量 • sample12.htm 全选或取消全选 • sample13.htm 使用下拉列表框提交表单 • sample14.htm 添加下拉列表框的选项 • sample15.htm defaultSelected和selected的区别 • sample16.htm 选课 • sample17.htm 二级联动菜单 • sample18.htm 预览图片 • sample19.htm 下拉列表框的选项排序 • sample20.htm 统计表单控件元素 第16章(\代码\第16章) • sample01.htm Screen对象的属性 • sample02.htm 满屏显示网页 • sample03.htm 判断浏览器是否支持Java • sample04.htm 浏览器的基本属性 • sample05.htm 显示浏览器的默认主页 • sample06.htm 查看浏览器支持的MIME类型 • sample07.htm 显示Flash • sample08.htm 跳转 • sample09.htm 加载和刷新文档 • sample10.htm 通过修改当前文档的URL来加载新文档 第17章(\代码\第17章) • sample01.htm 创建与读取Cookie • sample02.htm 读取Cookie • sample03.htm 精确读取Cookie值 • sample04.htm 精确读取Cookie值(使用数组) • sample05.htm 设置Cookie的有效期 • sample07.htm Cookie的域 • sample08.htm Cookie的安全性 • sample09.htm 为Cookie编码 • readCookie.htm 读取Cookie • cookie\sample06.htm Cookie的路径 第18章(\代码\第18章) • sample01.htm DOM • sample02.htm 节点的访问方法 • sample03.htm Node对象的常量 • sample04.htm Document接口的属性 • sample05.htm 访问文档的特殊节点 • sample06.htm 查看某个元素出现的次数 • sample07.htm 查看特定节点是否存在 • sample08.htm 查看指定id值的节点下的子节点 • sample09.htm 节点的名称 • sample10.htm 获得一个节点下的所有子节点 • sample11.htm 子节点与兄弟节点 • sample12.htm 节点的值 • sample13.htm 插入一个节点 • sample14.htm 插入一个节点(添加一个Text节点) • sample15.htm 插入一个节点(删除原节点) • sample16.htm 复制节点 • sample17.htm 在一个节点前插入节点 • sample18.htm 删除节点 • sample19.htm 删除节点(使用删除了的节点) • sample20.htm 获取节点名称 • sample21.htm 获得节点的属性值 • sample22.htm 添加属性与删除属性 • sample23.htm 查看Element节点下的所有属性 • sample24.htm 获得节点的属性值 • sample25.htm 添加属性与删除属性 • sample26.htm 改变文字 • sample27.htm 移动文字 第19章(\代码\第19章) • sample01.htm 使用正则表达式替换字符串 • sample02.htm 简单地匹配字符串 • sample03.htm 匹配字符串和子字符串 • sample04.htm 引用匹配成功的字符串 • sample05.htm 全局匹配 • sample06.htm 测试匹配是否成功 • sample07.htm RegExp的静态属性 • sample08.htm 验证邮政编码 • sample09.htm 验证身份证号码 • sample10.htm 验证电话号码 • sample11.htm 验证URL • sample12.htm 验证Email • sample13.htm 使用正则表达式和DOM结合 第20章(\代码\第20章) • sample01.htm 创建一个XMLHttpRequest对象 • sample02.htm 用户注册 第21章(\代码\第21章) • sample01.htm 使用JavaScript实现二级联动菜单 • sample02.htm 将下拉列表框内置于Iframe • sample03.htm 在Iframe获取服务器端数据 • sample04.htm 使用Ajax从服务器端获取数据 • sample05.htm 使用get方式提交数据 • sample06.htm 使用post方式提交数据 • sample07.htm 在Ajax使用post方式提交数据 • sample08.htm 在服务器端获得HTTP请求头 • sample09.htm 在客户端获得HTTP响应头 • sample10.htm 获取文件信息 • sample11.htm 获取服务器时间 • sample12.htm 砍掉Ajax的缓存 • sample13.htm 异步方式显示文档信息 • sample14.htm 在Ajax使用同步处理 • sample15.htm 在Ajax使用同步处理(改良后) • sample16.htm 网页的编码 • sample17.htm 网页的编码 • sample18.htm 网页的编码 • sample19.htm 读取不同编码的文本文件 • sample20.htm 获取动态网页程序返回的内容 第22章(\代码\第22章) • sample01.xml 完整的XML文件代码 • sample02.xml 无效的XML文件 • sample03.xml 空标签 • sample04.xml 无效的XML文件 • sample05.xml 区分大小写 • sample06.xml XML的属性值 • sample07.xml 转义字符 • sample08.xml 注释 • sample09.xml CDATA标签 • sample10.htm 在IE浏览器解析XML文件 • sample11.htm 在其他浏览器解析XML文件 • sample12.htm 跨浏览器解析XML文件 • sample13.htm 在IE浏览器解析XML字符串 • sample14.htm 在其他浏览器解析XML字符串 • sample15.htm 跨浏览器解析XML字符串 • sample16.htm 创建解析XML文件的函数 • sample17.htm 创建解析XML字符串的函数 • sample18.htm 输出XML文档的信息 • sample19.htm 访问根节点 • sample20.htm 访问根节点下的所有子节点 • sample21.htm 定位到节点 • sample22.htm 输出节点与子孙节点的值 • sample23.htm 通过循环输出所有子节点信息 • sample24.htm 返回节点的属性值 • sample25.htm 访问属性节点 • sample26.htm 获得元素节点的所有属性节点 • sample27.htm 获得元素节点的所有属性节点(跨浏览器) • sample28.htm 通过标签名查找节点 • sample29.htm 通过标签ID值查找节点 • sample30.htm 修改节点的值 • sample31.htm 删除节点 • sample32.htm 创建与添加节点 • sample33.htm 将节点插入在指定节点之前 • sample34.htm 在文本节点和注释节点添加数据 • sample35.htm 替换节点 • sample36.htm 替换节点值 • sample37.htm 删除节点值 • sample38.htm 复制节点 • sample39.htm 异步获取XML文件 • sample40.htm 处理从服务器上获取的XML文档 • sample41.htm 获取服务器返回的XML文档 第23章(\代码\第23章) • sample01.htm 内联样式 • sample02.htm 内部样式 • sample03.htm 外部样式 • sample04.htm 注释 • sample05.htm 类选择符 • sample06.htm ID选择符 • sample07.htm 伪类 • sample08.htm 样式继承 • sample09.htm 样式层叠 • sample10.htm 样式冲突 • sample11.htm 使用CSS设计网页 • sample12.htm HTML、XML与CSS的结合使用 • sample13.htm HTML、XML与CSS的结合使用(改良后) • sample14.htm 修改文字大小 • sample15.htm 下拉菜单

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值