您的当前位置:首页正文

练习汇总

2024-09-14 来源:年旅网
南京杰易

JAVA 基础和JDBC应用

www.eachtimes.com

第 1 页 共 20 页

南京杰易

第一章 开发简单JAVA应用程序

1. 自己动手安装JDK开发环境,按照书上示例配置环境变量。 (预估:20分钟)

2. 下载课上的例子,观察结构并动手运行。 (预估:10分钟)

3. 编写一个Application,在屏幕上显示如下的信息: ************************************ Welcome To JYSOFT

************************************ (预估:30分钟)

第二章 Eclipse简单应用

1. 自己动手安装Eclipse开发环境。 (预估:20分)

2. 如图 2.16,在Eclipse中新建书上的例子,并且运行得到正确的结果。 (预估:20分)

3. 在Eclipse上调试书上的例2.1,并且运行得到正确的结果。 (预估:20分)

4. 在Eclipse安装JUnit,并且编写书上的例2.3JUnit代码,得到结果。 (预估:20分) 5. 熟记Eclipse常用快捷键。

第三章 Java 语言基础

 编程题 1. 浮点运算

1.1 定义两个浮点型常量 1.12f 和 2.34 求这两个常量的和,差,积,除,并且打印。 (预估完成时长60分钟 考察:数据类型,运算符)

1.2 将第一题的结果四舍五入(在原来的结果上加0.5 然后强制类型转换为整数型),并且打印。 (预估:30分钟 考察:数据类型,运算符)

2. 定义一个整数型变量i,赋值为 17 用if…else语句判断i是否为偶数(i除2 ==0),如果为偶数,打印”I 是个偶数”,如果不是,打印”I 不是偶数”。 (预估:30分钟 考察:if else条件判断语句)

3. 使用第二题定义的变量i,用switch 判断i,分别判断i是否为1, 2, 17 然后分别打印”I 是 1”, “I 是 2” , “I 是 17”,如果都不是,打印”不是以上”。

www.eachtimes.com

第 2 页 共 20 页

南京杰易

(预估:30分钟 考察:switch条件判断语句)

4. 使用第二题定义的变量I ,循环10次,每次对i 加一,然后打印出最后循环结束时i的值。

4.1采用for 循环。

(预估:45分钟 考察:循环语句) 4.2 do while 循环。

(预估:30分钟 考察:循环语句) 4.3 while循环。

(预估:30分钟 考察:循环语句)

5. 定义一个字符串 “2008/13/31”。判断上面的字符串是不是一个正确的日期型。 5.1 首先 使用substring 截取出年份2008月份 13 日期 31 (预估:30分钟 考察:字符串处理) 5.2 首先判断年份是否为闰年。 提示闰年的条件是符合下面二者之一: (1)能被4整除,但不能被100整除。 (2)能被4整除,又能被100整除。

(预估:45分钟 考察:字符串处理)

5.3 如果是闰年,判断月份,如果月份是2月,并且2月份天数不是29,打印”错误日期”,如果是,打印”正确日期”。如果月份不是2月,判断月份是否在1~12之间 如果不是打印”错误日期”,否则如果月份是大月,判断日期是不是31天,如果不是打印”错误日期”,如果是,打印”正确日期”。如果月份是小月,判断日期是不是30天,如果不是打印”错误日期”,如果是,打印”正确日期”。 (预估:75分钟 考察:字符串处理)

5.4 如果不是闰年,判断月份,如果月份是2月,并且2月份天数不是28,打印”错误日期”,如果是,打印”正确日期”。如果月份不是2月,判断月份是否在1~12之间 如果不是打印”错误日期”,否则如果月份是大月,判断日期是不是31天,如果不是打印”错误日期”,如果是,打印”正确日期”。如果月份是小月,判断日期是不是30天,如果不是打印”错误日期”,如果是,打印”正确日期” (预估:60分钟 考察:字符串处理)

6. 有两个整数型一维数组,分别是{3,5,1,7,8,11,22} {2,8,6,4,88,66,44}。 6.1 首先循环打印出以上两个数组的所有值。 (预估:30分钟 考察:数组处理)

6.2 将以上两个数组复制到一个新的数组中(参见书3.6.3 数组复制),然后打印出这个新数组的所有值。

(预估:30分钟 考察:数组处理)

6.3 对这个新数组排序(参见书3.6.5 数组类的使用),打印排序结束的数组中所有值。(预估:30分钟 考察:数组处理)

7. 有两个字符串,”Welcome to ” 和“JYSOFT!”

www.eachtimes.com

第 3 页 共 20 页

南京杰易

7.1 我们首先把这个字.符串连接成为"Welcome to JYSOFT!"(使用StingBuffer) ,并且打印出该字符串。

(预估:30分钟 考察:StingBuffer处理)

7.2 然后将该字符串第2个到末尾的字符串子串取出,并且打印出该字符串。 (预估:30分钟 考察:StingBuffer处理)

7.3 然后将其中的大写E和小写e全部替换成I,然后输出该字符串。 (预估:30分钟 考察:StingBuffer处理) 8. 编写一个名为ArrayCheck的函数。

要求将一个整数数组作为变量传递到函数中。 (预估:60分钟 考察:数组) 打印出该数组的最大值。

(预估:60分钟 考察:数组) 打印出该数组的最小值。

(预估:60分钟 考察:数组) 打印出该数组的平均值。

(预估:60分钟 考察:数组)

9. (思考题)利用二维数组打印五行的杨辉三角。 杨辉三角:(TIPS:数据要求自己计算) 1 1 2 1 1 3 3 1 1 4 6 4 1 (预估:240分钟 考察:StringBuffer处理)  问答题: 1 2 3

设 x = 2 ,则表达式 ( x + + )/3 的值是 (预估:15分钟 考察:运算符)

若x = 5,y = 10,则x < y和x >= y的逻辑值分别为 和 (预估:15分钟 考察:表达式)

执行以下几个语句后的输出结果是 。 String s = “This one” , s1=”This two”; int i=5 if (i>10)

System.out.print(s) ; else

System.out.print(s1) ; (预估:15分钟 考察:判断语句) 4

数组x定义如下

www.eachtimes.com

第 4 页 共 20 页

int x[ ][ ]=new int[3][2]

南京杰易

则 x.length 的值为____________, x[0].length 的值为____________。 (预估:15分钟 考察:数组) 5

程序段

int m=0,n=0;

for (int i=0, j=1; i<10&&j<10;i++,j++) {if i>5 m++; else n--; j++;

}

运行后,m的内容为______ ,n的内容为______。 (预估:15分钟 考察:运算符) 6

程序

public class test_1{

public static void main(String[ ] args) {int x ;

int a[ ]={0,0,0,0,0,0}; calculate(a,a[5]);

System.out.println(“value is ”+a[0]); }

static int calculate(int x[ ],y) { for(int i=1 ;i<6; i++) if y<6 x[i]=x[i-1]+1; return x[0]; }

}

运行后,a[5]的内容为______ ,程序的输出(显示)结果为______ (预估:15分钟 考察:数组) 7

Java application中的主类需包含main方法,main方法的返回类型是什么?( ) (预估:15分钟 考察:Java基本功) 8

有一段java 应用程序,它的主类名是a1,那么保存它的源文件名可以是( ) (预估:15分钟 考察:Java基本功) 9

整型数据类型中,需要内存空间最少的是( ) (预估:15分钟 考察:基本数据类型)

www.eachtimes.com

第 5 页 共 20 页

A、int B、float C、double D、void

A a1.java B a1.class C a1 D都对

A short B long C int D byte

南京杰易

10 下面对Java相关的技术叙述正确的是:( ) A.Java仅仅是一种编程语言

B.Java只是一种虚拟的平台 C.Java即是开发环境又是开发平台 D.Java就是JavaScript

(预估:15分钟 考察:Java基本功)

11 下面对数组的定义及初始化不正确的方法是:( ) A.int array[]; B.int array[8]; C.int[] array=new int[8]; D.int array[]=new int[8]; (预估:15分钟 考察:数组)

12 下面这个程序能不能运行,如果不能运行,请指出错误在哪里

public class HelloDate { String s=\"intital value\";

public static void main(String[] args){ System.out.println(s); } }

(预估:15分钟 考察:字符串) 13 关于以下程序段,正确的说法是( )。

1. String s1=\"abc\"+\"def\";

2. String s2=new String(s1); 3. if(s1.equals(s2))

4. System.out.println(\".equals() succeeded\"); 5. if(s1= =s2)

6. System.out.println(\"= = succeeded\");

A. 行4与行6都将执行 B.行4执行,行6不执行 C. 行6执行,行4不执行 D.行4、行6都不执行 (预估:30分钟 考察:字符串) 14 关于以下程序段,,实现的功能是什么

public class Sum {

public static void main(String args[]) {

double sum=0.0;

for(int i=1;i<=100; i++) sum +=1.0/(double) i;

System.out.println(\"sum=\"+sum); }

}(预估:15分钟 考察:运算符) 15 关于以下程序段,,实现的功能是什么

public class Function {

public static void main(String args[]) {

int i 、j;

www.eachtimes.com

第 6 页 共 20 页

南京杰易

int a[]= {32、54、7、60、31、78、3、77、39、98}; for (i=o ; i {

int k=i; for (j=i; j if (a[j]

int temp =a[i]; a[i]= a;

a[k]=temp; }

for (i=0 ; i

System.out.print(a[i]+\" \") System.out.println(); } }

(预估:15分钟 考察:数组)

16 关于以下程序段,,输出结果为___________________________________________________。

public class Short {

public static void main(String args[]) {

StringBuffer s=new StringBuffer(\"Hello\"); if((s.length()>5)&&(s.append(\"there\") . equals(\"False\"))) ;

System.out.println(\"value is \"+s); }

}

(预估:15分钟 考察:字符串)

第四章 面向对象编程

 程序题:

1 建立包 com.jysoft.XXX 其中XXX为自己姓名的拼音。 1.1 在上面的包下面,生成书上例 4.9的程序。 (预估:60分钟 考察:类,包的概念)

1.2 再在上面的包下,生成书上例 4.10和4.11的程序,观察同一包下面不同的类之间的访问权限。

(预估:60分钟 考察:类,包的概念) 2 在上面的包中,建立名为TaiSyo的类

2.1 要求,在该类中实现两个无参数方法,一个静态方法,要求打印出”这是一个静态方法”

一个非静态方法,要求打印出”这是一个非静态方法” (预估:60分钟 考察:类,包的概念)

2.2 在同一包中,建立名为TestTaiSyo的类,并且实现main函数 要求在main函数中引用这个类的静态函数和非静态函数

www.eachtimes.com

第 7 页 共 20 页

南京杰易

(预估:60分钟 考察:对象的引用,静态函数) 3 编写程序模仿使用银行帐目

在上面的包中,创建一个类,Account.java。

它定义银行帐目。包括帐户金额,帐户密码,帐户号码等属性。

并且提供,初始化帐户,返回帐户号码,存款业务,取款业务(如果余额不足将出现警告信息)等方法。

(预估:60分钟 考察:类的生成) 4 编写程序模仿ATM机

4.1 创建一个名为Personal的接口,提供返回当前余额和提取金额两种方法。 (预估:60分钟 考察:类的生成)

4.2 创建一个名为PersonalAccount个人存款类型的帐户,继承自银行帐目并且实现了Personal的接口,并且要求个人取款可以赊五千块钱(提示用父类取款业务方法的覆盖来实现)

(预估:60分钟 考察:类的生成)

4.3 创建一个有main函数的类,ATM.java,让其通过接口访问上面的存款类型的帐户,

能够实现查询余额和取款功能

(预估:60分钟 考察:类的继承 接口)

5 分析下面的程序代码,完成程序注释,指出其中都使用了什么面向对象技术。

要求首先能读懂下面的程序,能够读懂别人的程序也是程序员必备的技术。在下列程序中增加注释,然后能够勾画出下面程序的对象继承关系和使用到的面向对象技术。最后要能够指出,为什么使用这些技术,使用这些技术的优点。 // Boss.java

public final class Boss extends Employee { private double weeklySalary; public Boss(String first, String last, double s) {

super(first, last); // call superclass constructor setWeeklySalary(s); }

public void setWeeklySalary(double s) { weeklySalary = (s > 0 ? s : 0); }

public double earnings() { return weeklySalary; }

public String toString() {

return \"经理: \" + super.toString(); }

}

// CommissionWorker.java

public final class CommissionWorker extends Employee {

www.eachtimes.com

第 8 页 共 20 页

南京杰易

private double salary; // 每周的底薪 private double commission; // 每周奖金 private int quantity; // 销售额

public CommissionWorker(String first, String last, double s, double super(first, last); setSalary(s);

c, int q) {

setCommission(c);

setQuantity(q); }

public void setSalary(double s) { salary = (s > 0 ? s : 0); }

public void setCommission(double c) { commission = (c > 0 ? c : 0); }

public void setQuantity(int q) {

quantity = (q > 0 ? q : 0); }

public double earnings() { return salary + commission * quantity; }

public String toString() {

return \"普通员工: \" + super.toString();

}

}

// Employee.java

public abstract class Employee { private String firstName; private String lastName; public Employee(String first, String last) firstName = first; lastName = last; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public String toString() { return firstName + ' ' + lastName; } // Employee抽象方法earnings();

public abstract double earnings();

}

www.eachtimes.com

第 9 页 共 20 页

{ 南京杰易

// HourlyWorker.java

// Definition of class HourlyWorker

public final class HourlyWorker extends Employee { private double wage; // 每小时工资 {

private double hours; // 每周工作时间 // Constructor for class HourlyWorker

public HourlyWorker(String first, String last, double w, double h)

super(first, last); setWage(w);

setHours(h); }

public void setWage(double w) { wage = (w > 0 ? w : 0); }

public void setHours(double h) {

hours = (h >= 0 && h < 168 ? h : 0); }

public double earnings() { return wage * hours; }

public String toString() {

return \"计时工人: \" + super.toString(); }

}

// PieceWorker.java

public final class PieceWorker extends Employee { private double wagePerPiece; // 生产量

private int quantity; // 工作周数

// Constructor for class PieceWorker

public PieceWorker(String first, String last, double w, int q) {

super(first, last);

setWage(w);

setQuantity(q); }

public void setWage(double w) { wagePerPiece = (w > 0 ? w : 0); }

public void setQuantity(int q) { quantity = (q > 0 ? q : 0); }

public double earnings() { return quantity * wagePerPiece; }

public String toString() {

www.eachtimes.com

第 10 页 共 20 页

南京杰易

return \"计件工人: \" + super.toString(); }

}

// Test.java

import javax.swing.JOptionPane; import java.text.DecimalFormat;

public class Test {

public static void main( String args[] ) {

Employee ref; // ref为Employee引用 String output = \"\";

Boss b = new Boss( \"史\", \"季华\", 800.00 ); CommissionWorker c =

new CommissionWorker( \"张\", \"雪\",

400.0, 3.0, 150); PieceWorker p =

new PieceWorker( \"包\", \"利\", 2.5, 200 ); HourlyWorker h =

new HourlyWorker( \"科\", \"鹏\", 13.75, 40 );

DecimalFormat precision2 = new DecimalFormat( \"0.00\" ); ref = b; // 把父类的引用ref赋值为子类Boss对b的引用 output += ref.toString() + \" 工资 ¥\" +

precision2.format( ref.earnings() ) + \"\\n\" + b.toString() + \" 工资 ¥\" +

precision2.format( b.earnings() ) + \"\\n\"; ref = c; // 把父类的引用ref赋值为子类普通员工对c的引用 output += ref.toString() + \" 工资 ¥\" +

precision2.format( ref.earnings() ) + \"\\n\" + c.toString() + \" 工资 ¥\" +

precision2.format( c.earnings() ) + \"\\n\"; ref = p; // 把父类的引用ref赋值为子类计件工人对p的引用 output += ref.toString() + \" 工资 ¥\" +

precision2.format( ref.earnings() ) + \"\\n\" + p.toString() + \" 工资 ¥\" +

precision2.format( p.earnings() ) + \"\\n\"; ref = h; // 把父类的引用ref赋值为子类计时工人对h的引用 output += ref.toString() + \" 工资 ¥\" +

precision2.format( ref.earnings() ) + \"\\n\" + h.toString() + \" 工资 ¥\" +

precision2.format( h.earnings() ) + \"\\n\"; System.out.println(output);

www.eachtimes.com

第 11 页 共 20 页

南京杰易

System.exit( 0 ); } }

}

(预估:180分钟 考察:所有面向对象技术) 4 尝试用面向对象技术开发一个古代战争游戏

4.1 首先编写朝代这个类,包括朝代名字,朝代的人口,军队总数,军队的士气,文明的程度(比如有青铜时代,白银时代,黄金时代之类)。

实例化朝代这个类,定义两个对象,比如宋,金。 (预估:60分钟 考察:所有面向对象技术)

4.2 建立一个战争类,在其中定义,战争名称,战争的地点,战争的时间,战争的双方,战争的宣布,战争的决胜判断,战争的结束等方法。 (预估:60分钟 考察:所有面向对象技术)

4.3 尝试自己创立一个算法来实现战争的决胜判断,比如根据人口,军队总数,军队的士气,文明的程度四个变量综合判断,如果有三个超越对方既为赢,如果两个一样,则可以根据随机数判断是否赢。

(预估:60分钟 考察:所有面向对象技术)

4.3 实例化战争类对象,定义一个变量比如宋金战争。宋,金两个变量引入,进行战争开始,判断和终结。

(预估:60分钟 考察:所有面向对象技术)

具体的实现技术由大家自己考虑,游戏里面具体类的设计也可以自由发挥。

4.4 完成之后请大家谈论,还可以增加什么功能增强游戏的可玩性,怎么用面向对象设

计思路才能更好的设计该游戏,让其推向市场。

(预估:60分钟 考察:所有面向对象技术)

5 (思考题,有兴趣者可以选作,如果课时不够,不推荐做)现在最流行的游戏魔兽争霸大家都玩过,魔兽争霸其实就是面向对象设计的经典之作。

大家可以尝试,自己根据自己的理解,设计一个魔兽争霸的原形。

魔兽里面有四个种类:人类,暗夜精灵,兽族,死族。我们首先定义一个抽象类,包括四个种族的共性,然后四个种族从其继承。每个种族都有自己的专有属性。 定义一个英雄接口,包括英雄的一些基本属性,比如可以重生。 然后每个族定义一个英雄,继承自每个种族,并且实现了英雄的接口。

定义一个实战类,包括实战的地图,地图对于每种英雄实力发挥的影响,地图中可以包括的英雄的个数,地图决胜的条件。

然后实例化实战类的一个对象,让英雄自己PK,得到PK结果。

这个题目比较复杂,有兴趣的学生可以多考虑一点细节的问题,并不一定要把程序代码写出来。可以把自己的设计思路整理出来即可。 (预估:320分钟 考察:所有面向对象技术)

选择题:

1. 下面的程序运行之后会发生什么

www.eachtimes.com

第 12 页 共 20 页

南京杰易

public class mymain{

public static void main(String argv){

System.out.println(\"hello cruel world\"); } }

A. 类名中包括main关键字,编译器报错,无法运行 B. 编译成功,运行结果为\"hello cruel world\" C. 构造函数没有定义,无法通过编译

D. main主函数定义格式不正确,无法通过编译 (预估:15分钟 考察:Java基本功) 2. 下面的程序运行之后会发生什么 //file p1.java

package mypackage; class p1{

void afancymethod(){

system.out.println(\"what a fancy method\"); } }

//file p2.java

public class p2 extends p1{

public static void main(String argv[]){ p2 p2 = new p2();

p2.afancymethod(); } }

A. 两个Java程序都通过编译,然后打印出“what a fancy method”B. 永远不会通过编译

C. 两个Java程序都通过编译,但是p2在运行的时候会出错 D. p1可以通过编译但是p2不可以 (预估:15分钟 考察:Java基本功) 3. 下面的程序运行之后会发生什么 public class myar{

public static void main(String argv[]){ int[] i = new int[5];

System.out.println(i[5]); } }

A. 编译时出错 B. 运行时出错 C. 输出”0” D. 输出”null”

(预估:15分钟 考察:Java基本功) 4. 下面的程序运行之后会发生什么

www.eachtimes.com

第 13 页 共 20 页

南京杰易

public class hope{

public static void main(String argv[]){ hope h = new hope(); }

protected hope(){ for(int i =0; i <10; i ++){

System.out.println(i); } } }

A. 编译时出错,构造函数不能定义为protected B. 运行时出错,构造函数不能定义为protected C. 输出0到10 D. 输出0到9

(预估:15分钟 考察:面向对象访问字) 5. 下面的程序运行之后会发生什么 public class as{ int i = 10; int j;

char z= 1; boolean b;

public static void main(String argv[]){ as a = new as();

a.amethod(); }

public void amethod(){ System.out.println(j);

System.out.println(b); } }

A. 编译成功,并且运行输出0和false B. 编译成功,并且运行输出0和true C. 编译错误,b没有初期化 D. 编译错误,z必须被赋值char型 (预估:15分钟 考察:Java基本功)

6. 下面的程序运行之后会发生什么 public class arg{ string[] myarg;

public static void main(string argv[]){ myarg=argv; }

public void amethod(){

www.eachtimes.com

第 14 页 共 20 页

南京杰易

System.out.println(argv[1]); } }

A. 编译错误

B. 编译成功,并且运行输出\"hello\" C. 编译错误,并且运行输出\"there\" D. 以上都不是

(预估:15分钟 考察:Java基本功) 7. 下面的程序运行之后会发生什么

class valhold{

public int i = 10; }

public class obparm{

public static void main(string argv[]){ obparm o = new obparm(); o.amethod(); }

public void amethod(){ int i = 99;

valhold v = new valhold(); v.i=30; another(v,i);

system.out.print( v.i ); }//end of amethod

public void another(valhold v, int i){ i=0; v.i = 20;

valhold vh = new valhold(); v = vh;

system.out.print(v.i); system.out.print(i); }//end of another }

A. 10030 B. 20030 C. 209930 D. 10020

8. 下面的程序中,应该添加那行程序

class base{

www.eachtimes.com

第 15 页 共 20 页

南京杰易

public base(int i){} }

public class myover extends base{ public static void main(string arg[]){

myover m = new myover(10); } myover(int i){ super(i); }

myover(string s, int i){ this(i); } }

A. myover m = new myover(); B. super(); C. this(\"hello\); D. base b = new base(10); 9. 下面的程序中,应该添加那行程序

class inout{

string s= new string(\"between\"); public void amethod(final int iargs){ int iam;

class bicycle{

public void sayhello(){ }

}//end of bicycle class }//end of amethod

public void another(){ int iother; } }

A. system.out.println(s); B. system.out.println(iother); C. system.out.println(iam); D. system.out.println(iargs);

第五章 异常处理

要求:所有的编程题都要设计测试用例及测试结果 1. 问答题:(考察:运行时异常处理 预估:30分钟)www.eachtimes.com

第 16 页 共 20 页

南京杰易

看下面的代码,分析可能发生的异常,指出如何修改。

1. public static void main(String[] args) {

String s = null; String s2 = \"a\"; compare(s, s2); }

public static int compare(String a, String b) {

return a.compareTo(b);

}

2. public static void main(String[] args) { String s = \"welcome to JYSOFT\"; System.out.println(s.substring(0, 15));

}

3. public static void main(String[] args) { String s = \"1.2-\"; int i = Integer.parseInt(s); }

4. public static void main(String[] args) { Object s = \"100\"; Integer i = (Integer) s;

}

2. 在第四章练习中,建立了帐户类。现要求check帐户的有效性,帐户的金额:必须

是数字(可以是小数,小数点后2位),帐户密码:多于3位少于6位,帐户号码:固定5位的数字,帐户人名字:不得超过5位,性别:男或女。如果check出错,抛出一个自定义异常,并打印出异常信息。

(考察:异常抛出、处理 预估:120分钟)

步骤提示:

1) 建立帐户对象,利用构造函数为账户的每个属性附值 2) 取得帐户的金额,并做金额check 3) 取得帐户的密码,并做密码check 4) 取得帐户的号码,并做号码check

5) 取得帐户的帐户人名字,并做帐户人名字check 6) 取得帐户的性别,并做性别check

要求:check有2种方式。第一,以上check中任何一个check出错,打印错误信息后函数终止;第二,打印出所有的错误信息(可以把所有的错误信息拼成字符串最终打印)。2种方式都分别实现,并且设计测试用例及测试结果。

3. 利用捕捉异常的方法,检查一个字符串是否是数字。无论检查结果如何都要打印出

检查结果。要求:设计测试用例及测试结果(考察:异常处理方式;预估:20分钟)。

第六章 输入输出流及文件操作

要求:所有编程题必须设计测试用例和测试结果

www.eachtimes.com

第 17 页 共 20 页

因篇幅问题不能全部显示,请点此查看更多更全内容