JAVA复习题 - 补充

更新时间:2024-01-11 14:44:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

选择题

1下述字符组合不能作为Java程序标识符的是【D】 A:Aa12 B:大x C:y小 D:5x 2以下程序代码的输出的结果是【A】 int x=53;

System.out.println(1.0+x/2); A:27.0 B:27.5 C:1.026 D:1.026.5 3 以下java代码,以下四个叙述最确切的是【B】 Class A

{ int x; static int y;

void fac(String s){ System.out.println(“字符串:”+s); } }

A:x、y和s都是成员变量

B:x是实例变量、y是类变量、s是局部变量 C:x和y是实例变量、s是参数 D:x、y和s都是实例变量 *4需要分析字符串,并将字符串分解成可被独立使用的单词,可使用java.util包中的类是【C】 A:String B:StringBuffer C:StringTokenizer D:stringTokenizer *5要为程序的子窗口设定一个由字符串s指定的名字,可以采用的代码是【D】 A:JFrame(s) B:window(s) C:new JFrame(s) D:super(s) 6以下关于菜单的叙述中,正确的是【A】

A:菜单分三级定义,最高一级的是菜单条,菜单条中放菜单,菜单中放菜单项 B:菜单分三级定义,最高一级的是菜单,菜单中放菜单条,菜单条中放菜单项 C:菜单分两级定义,最高一级的是菜单,菜单中放菜单项

D:菜单分两级定义,最高一级的是菜单条,菜单条中放菜单项 7. Java语言中,在类定义时用final关键字修饰,是指这个类(A) A:不能被继承 B:在子类的方法中不能被调用 C:能被别的程序自由调用 D:不能被子类的方法覆盖 8用Thread子类实现多线程的步骤顺序是【D】

A:声明Thread类的子类,创建Thread子类的实例,让线程调用start()方法

B:声明Thread类的子类,在子类中重新定义run()方法,创建Thread子类的实例 C:创建Thread子类的实例,让线程调用start()方法

D:声明Thread类的子类,在子类中重新定义run()方法,创建Thread子类的实例,让线程调用start()方法

9,为16位Unicode字符流提供读和写操作支持的类分别是【C】 A:FileInputStream类和FileOutputStream类 B:InputStream类和OutputStream类 C:FileReader类和FileWriter类 D:File_Reader类和File_Writer类

*10能利用对象提供的方法获得流对象和实现网络连接的是【A】 A:URLConnection对象 B:URL对象 C:InetAddress对象 D:TCP/IP对象 11. 编译Java Applet 源程序文件产生的字节码文件的扩展名为( B )。 A、java B、class C、html D、exe

12. main方法是Java Application程序执行的入口点,关于main方法的方法头以下哪项是合法的( B )

A、public static void main( )

B、public static void main( String args[] ) C、public static int main(String [] arg ) D、public void main(String arg[] )

13.为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( A )。

A、static void method( ) B、public void method( ) C、final void method( ) D、abstract void method( ) 14.下列哪个是合法的Java标识符?( B )

A、Tree&Glasses B、FirstJavaApplet C、1_$theLastOne D、273.5

15.Java Application源程序的主类是指包含有( A )方法的类。 A、main方法 B、toString方法

C、init方法 D、actionPerfromed方法

16.Java的字符类型采用的是Unicode编码方案,每个Unicode码占用( B )个比特位。 A、8 B、16 C、32 D、64 17.设 a = 8,则表达式 a >>> 2 的值是( B )。 A、1 B、2 C、3 D、4

18.若a的值为3时,下列程序段被执行后,c的值是多少?( C ) c = 1;

if ( a>0 ) if ( a>3 ) c = 2; else c = 3; else c = 4; A、1 B、2 C、3 D、4

19.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( C )语句。

A、import java.awt.* ; B、import java.applet.Applet ; C、import java.io.* ; D、import java.awt.Graphics ; 20.对于构造函数,下列叙述不正确的是( B )。

A、构造函数是类的一种特殊函数,它的方法名必须与类名相同。 B、构造函数的返回类型只能是void型。

C、构造函数的主要作用是完成对类的对象的初始化工作。 D、一般在创建新对象时,系统会自动调用构造函数。

21.下面的是关于类及其修饰符的一些描述,不正确的是:( B )。 A、abstract类只能用来派生子类,不能用来创建abstract类的对象。 B、final类不但可以用来派生子类,也可以用来创建final类的对象。 C、abstract不能与final同时修饰一个类。

D、abstract方法必须在abstract类中声明,但abstract类定义中可以没 有abstract方法。

22. 若需要定义一个类域或类方法,应使用哪种修饰符?( A ) A、static B、package C、private D、public

23.若在某一个类定义中定义有如下的方法: abstract void performDial( ); 该方法属于( D )。

A、本地方法 B、最终方法 C、解态方法 D、抽象方法

*24. 下列关于静态初始化器的叙述中,哪一个是正确的?( D )

A、静态初始化器是在构造函数之前加上static修饰符。//有的不能加static B、静态初始化器是对类自身进行初始化。//静态成员 C、静态初始化器在同一个类中只能有一个。//重载

D、静态初始化器是在其所属的类加载内存时由系统自动调用执行。//类加裁一次 25.不使用static修饰符限定的方法称为对象(或实例)方法,下列哪一个说法是正确的?( D )

A、实例方法可以直接调用父类的实例方法。 B、实例方法不可以直接调用父类的类方法。 C、实例方法可以直接调用其他类的实例方法。 D、实例方法可以直接调用本类的类方法。 26.设有下面两个类的定义:

class Person { class Student extends Person { long id; // 身份证号 int score; // 入学总分 String name; // 姓名 int getScore(){

} return score; } }

问:类Person和类Student的关系是( B )。 A、包含关系 B、继承关系

C、关联关系 D、无关系,上述类定义有语法错误 27. 设有下面的两个类定义: class AA {

void Show(){ System.out.println(“我喜欢Java!”); }

class BB extends AA {

void Show(){ System.out.println(“我喜欢C++!”); }

则顺序执行如下语句后输出结果为:( A ) AA a; BB b; a.Show(); b.Show();

A、我喜欢Java! B、我喜欢C++! 我喜欢C++! 我喜欢Java! C、我喜欢Java! D、我喜欢C++! 我喜欢Java! 我喜欢C++! 28. 设有下面的一个类定义: class AA {

static void Show( ){ System.out.println(“我喜欢Java!”); } }

class BB { void Show( ){ System.out.println(“我喜欢C++!”); } } 若已经使用AA类创建对象a和BB类创建对象b,则下面哪一个方法调用是最合适:(A、a.Show( ) B、AA.Show( ); b.Show( ) BB.Show( ); C、AA.Show( ); D、a.Show( ); b.Show( ); BB.Show( );

) C

29.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数的个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序特性称为( C )。 A、隐藏 B、覆盖 C、重载 D、Java不支持此特性 30. 对于构造函数,下列叙述不正确的是( C )。 A、构造函数也允许重载。

B、子类无条件地继承父类的无参构造函数。 C、子类不允许调用父类的构造函数。

D、在同一个类中定义的重载构造函数可以相互调用。

31.在使用interface声明一个接口时,只可以使用( D )修饰符修饰该接口。 A、private B、protected C、private protected D、public 32.设有下面两个赋值语句:

a = Integer.parseInt(“1024”);

b = Integer.valueOf(“1024”).intValue(); 下述说法正确的是( D )。

A、a是整数类型变量,b是整数类对象。 B、a是整数类对象,b是整数类型变量。

C、a和b都是整数类对象并且它们的值相等。 D、a和b都是整数类型变量并且它们的值相等。 33.在Java Applet程序用户自定义的Applet子类中,常常重载( D )方法在Applet的界面中显示文字、图形和其它界面元素。

A、start( ) B、stop( ) C、init( ) D、paint( ) *34.下面的语句的作用是:( D )。 Vector MyVector = new Vector(100,50);

A、创建一个数组类对象MyVector,有100个元素的空间,每个元素的初值为50。 B、创建一个向量类对象MyVector,有100个元素的空间,每个元素的初值为50。 C、创建一个数组类对象MyVector,有100个元素的空间,若空间使用完时,以50 个元素空间单位递增。

D、创建一个向量类对象MyVector,有100个元素的空间,若空间使用完时,以50 个元素空间单位递增。

35.在Java中,存放字符串常量的对象属于( B )类对象。 A、Character B、String C、StringBuffer D、Vector

36.在Java中,开发图形用户界面的程序需要使用一个系统提供的类库,这个类库就是( D )包。

A、java.io B、java.util C、java.applet D、java.awt

37.在Java图形用户界面编程中,若显示一些不需要修改的文本信息,一般是使用(A )类的对象来实现。

A、Label B、Button C、TextArea D、TextField 38. 创建一个标识有“关闭”按钮的语句是( D )。 A、TextField b = new TextField(“关闭”);

B、Label b = new Label(“关闭”);

C、Checkbox b = new Checkbox(“关闭”); D、Button b = new Button(“关闭”);

39. 在编写异常处理的Java程序中,每个catch语句块都应该与( C )语句块对应,使得用该语句块来启动Java的异常处理机制。

A、if – else B、switch C、try D、throw

40. 在编写Java Applet程序时,若需要对发生的事件作出响应和处理,一般需要在程序的开头写上( D )语句。

A、import java.awt.* ; B、import java.applet.* ; C、import java.io.* ; D、import java.awt.event.* ; 41.对于子类的构造函数说明,下列叙述中不正确的是(D )。 A、子类无条件地继承父类的无参构造函数。

B、子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函 数,但这个调用语句必须是子类构造函数的第一个可执行语句。

C、在创建子类的对象时,将先执行继承自父类的无参构造函数,然后再执行 自己的构造函数。

D、子类不但可以继承父类的无参构造函数,也可以继承父类的有参构造函数。

42.以下是关于FlowLayout布局组件排列顺序的叙述,正确的是(B) A:从上到下排列 B:从左到右排列 C:从下到上排列 D:从右到左排列

43.在下述字符串中,不属于...Java语言关键字的是 ( C ) A.float B.new C.java

D.return

44.Java语言中数值数据的类型能自动转换,按照从左到右的转换次序为 ( B A. byte→int→short→long→float→double B. byte→short→int→long→float→double C. byte→short→int→float→long→double D. short→byte→int→long→float→double

45.在以下供选择的概念中,不属于...面向对象语言概念的是 ( B ) A.消息 B.模块 C.继承

D.多态性

46.在下述Java语言语句中,错误..的创建数组的方法是 ( D ) A.int intArray [ ]; int Array=new int[5]; B.int intArray [ ]=new int[5]; C.int [ ] intArray ={1,2,3,4,5}; D.int intArray [5]={1,2,3,4.5};

)

47.在Swing中,它的子类能用来创建框架窗口的类是 ( B ) A.JWindow C.JDialog

B.JFrame D.JApplet

48.MouseListener接口不能处理的鼠标事件是 ( D ) ..A.按下鼠标左键 C.鼠标进入

B.点击鼠标右键 D.鼠标移动

49.继承是面向对象的程序设计的一个重要特征,它要使用的关键字是 ( A ) A. extends C.implements

B.public D.static

50.Java程序设计中常会用到抽象类,标识抽象类的关键字是 ( C ) A.public C.abstract

51.这是java程序中的一个方法 public static long fac(int n){ if(n==0||n==1){return 1;} else return n*fac(n-1); }

那么System.out.println(fac(4));将在控制台上输出( C ) A.120 C.24

52.以下不属于类的核心特性是 ( A ) A.集合 C. 继承性

B.封装性 D.多态 B.12 D.10 B.void D.String

53.以下关于类的语法和命名规范诉述中不正确的是( D ) A.一个源文件只能有一个public的类 C.包名必须放在第一行

B.源文件名必须与public类名一致 D.非公有(public)的类名必须以数字开头

54.程序

public class Test {

public static int method() { int i = 1; if (i = 1) { return i++; } else

return 1; }

public static void main(String[] args) {

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

输出结果是( D )

A.1 B. 2

C. 3 D. 编译无法通过,输出异常 55.在图形用户界面(GUI)的程序中,必须调用以下哪个方法才能使程序员看到( A ) A . setVisible( ) B . setSize( ) C. setText( ) D. setBackground( )

56.Java程序设计中,若想将一个类定义为最终类,那么要在定义类时用关键字( D ) A .protect B .class

C .abstract D .final 57. 以下程序

public class Test {

public static void main(String[] args) { for (int i = 1; i <= 4; i++) { for (int j = 1; j <= i; j++) { System.out.print(\ }

System.out.println(); } } }

的结果是( A )

A. * B. * * * *

* * * * * * * * * * * * * * *

C. * D. * * * *

* * * * * * * * * * * * * * *

58 CardLayout _布局使容器的多个组件拥有同一个显示空间,某一时刻只能显示一个组件 A BorderLayout B FlowLayout C GridLayout D CardLayout 59一个Java Application源程序文件名为MyJavaApplication.java,如果使用Sun公司的Java开发工具JDK执行编译好的该应用程序,下列命令正确的()

A javac MyJavaApplication.java B javac MyJavaApplication.class C java MyJavaApplication.java D java javac MyJavaApplication

二、填空题

1.一个可嵌入网页的小应用程序必须定义成一个_ Applet(JApplet)类的子类____。 *2.一个基于Swing的应用程序可能在任何平台上都会有相同的外观和风格。 3.类是对一组相同对象的描述,类概括了同类对象的共有性质:___数据(属性)和方法(函数)__。 *?4.设有数组a和b的定义如下: int []a={1,2,3};int []b={4,5,6} ??

执行以下代码\;\除了完成赋值操作之外,引起系统额外要做的工作是回收内存。 6.Java语言为处理鼠标事件提供两个接口:MouseListener接口和MouseMotionListener接口。

7.程序员用Java语言编写多线程应用程序,程序员能控制的关键性工作有两个方面:一是编写线程的run()方法;二 是建立线程实例。 8.Java中的类具有封装性、继承性和多态性。 9.多态性通过方法的重载和覆盖来实现。

10.Java中,异常情况分为Exception(异常)和Error(错误)两大类。 11.Java中,可以通过try…catch..finally结构对异常进行捕获和处理。

12.方法int maxDigit(int n)的功能是找出十进制整数n各位数字中最大的一位数字。例如,n=23765,该方法的返回值是7。 static int maxDingit(int n){ int c=0,d; while(n>0){ d=_n % 10; if(d>c)c=d; n/=10; }

_return c; }

14.设x = 2 ,则表达式 ( x + + ) * 3 的值是 6 。

15. 若x = 5,y = 10,则x > y和x <= y的逻辑值分别为 false和true。 16. 顺序执行以下两个语句的输出结果是: 10 。 String s = “我喜欢学习Java!”;

System.out.println(s.length( ));

17. 据程序的构成和运行环境的不同,Java源程序主要分为两大类:通过Java虚拟机运行的Java Application程序和通过浏览器执行的Java Applet ( 或 Application、Applet )程序。

18.如果一个Java源程序文件中定义有4个类,则使用Sun公司的JDK编译器javac编译该源程序文件将产生4个文件名与类名相同而扩展名为class的字节码文件。 19.开发与运行Java应用程序需要经过的三个主要步骤为编辑源程序、编译生成字节码和解释运行字节码。

20.如果一个Java Applet源程序文件只定义有一个类,该类的类名为MyApplet,则类MyApplet必须是Applet类的子类并且存储该源程序文件的文件名必须为MyApplet.java。 22.在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码字符占用2字节内存空间,这样,无论是中文字符还是英文字符,每个都是占用相同字节内存空间。

23.Java源程序是由类定义组成的,每个程序中可以定义若干个类,但是只有一个类是主类。在Java Application中,这个主类是指包含main方法的类;

24.创建一个名为 MyPackage 的包的语句是package MyPackage ; ,该语句应该放在程序的位置为:应该在程序第一句。

25. 抽象方法 或abstract方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。最终方法或final方法是不能被当前类的子类重新定义的方法。

26.形式参数指的是方法被定义时的参数行,实际参数是方法被调用时所传递进去的变量或值。

27.多态是指一个程序中有多个同名的不同方法,在Java中有两种多态,一种是使用方法的覆盖实现多态,另一种是使用方法的重载实现多态。 28.在Java程序中,通过类的定义只能实现 单 重继承,但通过接口的定义可以实现 多 重继承关系。

30 .设有数组定义:int MyIntArray[ ] = { 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100 };

则执行以下几个语句后的输出结果是 550 。 int s = 0 ;

for ( int i = 0 ; i < MyIntArray.length ; i + + ) s += MyIntArray[i] ; System.out.println( s );

31.在Applet中,创建一个具有10行45列的多行文本区域对象ta的语句为: TextArea ta = new TextArea( 10 , 45 );

32.创建一个标识有“广西广播电视大学”字样的标签对象gxdd的语句为Label gxdd = new Label(“广西广播电视大学”); ;创建一个标识有“关闭”字样的按钮对象gb的语句为Button gb = new Button(“关闭”);。

33.Java的编译程序先将Java源程序翻译成与机器无关的__________。字节码文件 34.语句System.out.println(“12”+”34”)输出的值是__________。 1234

*35. 设已知服务器的IP地址和端口号,要创建一个套接字对象,支持这个要求的类是__________。Socket

*36.Java语言提供了两个用于处理字符串的类,它们是__________。String\\StringBuffer 37.程序填空:

public class Test {

public static void main(String[] args) {

int [][] a = { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8, 9 } }; for (int i = 0; i < a.length ; i++) {

for (int j = 0; j < a[i].length ; j++) { System.out.print(a[i][j] + \ }

System.out.println(); }

}

}

程序题(2*10=20)

1.编写Search类的一个方法int maxNumIndex(int[]a):寻找已知数组中最大数的下标并返回。 (10分) public class Search{

int maxNumIndex(int[]a){ int i,maxIndex;

for(i=maxIndex=0;ia[maxIndex]) maxIndex=i; }

return maxIndex; } }

2.设计实现学生的类Student.Student具有私有属性:姓名、学号、性别。并写出设置和获取属性的方法;

public class Student{ private String name; private String number; private String sex;

public void setName(name){ this.name=name; }

public void setNumber(number){ this. number = number; }

public void setSex(sex){ this.sex=sex; }

public String getName(){ return name; }

public String getNumber(){ return number; }

public String getSex(){ return sex; } }

3.以下程序的界面有一个按钮button、一个文本区textA和一个文本框textF。程序运行时,在文本区中输入数字序列,单击按钮,则在文本框中显示数字序列的和。以下是要求你编写的actionPerformed(ActionEvent e)方法的部分代码。

public void actionPerformed(ActionEvent e) { if (e.getSource() == button) {

String s = textA.getText(); double sum =0; //请在以下位置编写代码 //答案

int n=s.length(); int i=0; while(i

4.创建一个标题为\按钮\的窗框,窗框中显示有\按下我\字样的按钮。 import java.awt.*; public class abc {

public static void main(String args[]) { new FrameOut(); } }

class FrameOut extends Frame { Button btn; FrameOut() { }

}

super(\按钮\);

btn = new Button(\按下我\); setLayout(new FlowLayout()); add(btn);

setSize(300, 200); setVisible(true);

5. 设计学生类student,其数据域至少包括:学号(ID)姓名(name)性别(sex)英语等三门课程成绩(score)3门功课总成绩(sum)3门功课平均成绩(average)。成员方法至少包括:构造方法、计算总成绩方法getSun()、计算平均成绩方法getAve()。 public class Student { private int ID; private String name; private String sex; private int score[3]; private int sum; private int average;

public Student( ) {ID=0; name=null; sex=0; }

public Student(int ID, String name, String sex, int s1, int s2,int s3) { this.ID = ID; this.name = name; this.sex = sex; score[0]=s1; score[1]=s2; score[2]=s3; }

public int getSun( ) { sum=english+score[0]+score[1]+score[2]; return sum; }

public int getAve( ) { average=sum/3; return average; }

}

6.设计按钮,要求:标题“按钮示例”实现2个按钮,“First”与“Second”,位置(180,160),窗口大小(300,300),类名ButtonApp,(提示需要导入的: java.awt.*; javax.swing.*;)

答案:

import java.awt.Button;

import java.awt.FlowLayout; import javax.swing.JFrame;

public class ButtonApp extends JFrame {

Button button1 = new Button(\Button button2 = new Button(\public ButtonApp() {

super(\按钮示例\

this.setLayout(new FlowLayout()); this.setLocation(180, 160); this.setSize(300, 300); this.add(button1); this.add(button2);

}

public static void main(String[] args) {

buttonApp = new ButtonApp(); buttonApp.setVisible(true);

} }

7.用java语言设计一个程序,计算1+2+3+??+100; 要求:1)类名 Test

2)在主方法外写一个计算连加的方法,方法名为method且要通过传一整形参数,及

方法声明时用的的语句的一部分为 int method(int n); 3)在主方法中调用2)中写的方法,并在控制台输出值5050。

public class Test {

public static int method(int n){ int sum=0;

for(int i=1;i<=n;i++){ sum=sum+i; } return sum; }

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

8.最小公倍数是小学数学中的一个重点,为方便计算,现要求你用java语言写一个求两个大于0的整数的最小公倍数的程序以解决所有求两个整数最小公倍数的问题; 要求:1)类名 TestApp

2)在主方法外写一个求最小公倍数的方法,方法名为method且要求通过传两个整

形参数,及方法声明时的语句的一部分为 int method(int a , int b );

3)在主方法中调用2)中写的方法,并用一组数据3和11进行测试,即求出3和11的最小公倍数,根据控制台的输出判断程序的正确性。 public class TestApp {

public static int method(int a, int b) { int c = a > b ? a : b; int min = 0;

for (int temp = c; true; temp++) {

if (temp % a == 0 && temp % b == 0) { min = temp; break; }

}

}

return min; }

public static void main(String[] args) { System.out.println(method(3, 11)); }

9,试用布局管理器实现如下应用程序的界面设计,其中输入文字为标签(Label),中间为文本区(TextArea),其它为六项按纽(Button),用语言描述或用程序实现均可。

import java.awt.*;

public class document extends Frame { document()

{ setLayout(new BorderLayout());/*窗口布局*/ Panel pan1 = new Panel();/*容器*/

pan1.setLayout(new GridLayout(3,1,0,5));/*容器布局*/ Panel pan2 = new Panel();/*容器*/

pan2.setLayout(new FlowLayout());/*容器布局*/ Panel pan3 = new Panel();/*容器*/

pan3.setLayout(new FlowLayout());/*容器布局*/ Button but1 = new Button(\检查\按钮*/ Button but2 = new Button(\搜索\ Button but3 = new Button(\选项\ Button but4 = new Button(\存档\ Button but5 = new Button(\取消\ Button but6 = new Button(\求助\

Label lab = new Label(\输入文字\标签*/ TextArea ta = new TextArea();/*文本框*/ pan1.add(but1);/*加载到容器1*/ pan1.add(but2); pan1.add(but3);

pan2.add(but4);/*加载到容器2*/ pan2.add(but5); pan2.add(but6);

pan3.add(lab);/*加载到容器3*/

add(pan1,\加载到窗口 布局位置*/ add(pan2,\ add(pan3,\ add(ta,\

setSize(300,150);/*窗口大小*/ setVisible(true); }

10,一个加法运算器的简易运算软件,实现三个文本行对象(TextField:text1,text2,result),一个标签(Label:lab),一个按纽(Button:btn),程序运行时,在前两个文本行中输入两个整数,点击按纽时,将前两文本行中的两个数相加,结果显示在第三个文本行result中。 以下是要求你编写的actionPerformed(ActionEvent e)方法的部分代码。

public void actionPerformed(ActionEvent e) //实现接口的完成动作消息处//理方法:actionPerformed,注意:参数必须有事件:ActionEvent 和 事件对//象e {

int x = Integer.parseInt(text1.getText()) +

Integer.parseInt(text2.getText());

result.setText(Integer.toString(x)); } }

本文来源:https://www.bwwdw.com/article/6bko.html

Top