搜档网
当前位置:搜档网 › AudioRecord和AudioTrack类的使用

AudioRecord和AudioTrack类的使用

AudioRecord和AudioTrack类的使用
AudioRecord和AudioTrack类的使用

[经验分享] AudioRecord和AudioTrack类的使用

(1)创建AudioRecord和AudioTrack类对象:创建这两个类的对象比较复杂,通过对文档的反复和仔细理解,并通过多次失败的尝试,并在北理工的某个Android大牛的网上的文章启发下,我们也最终成功地创建了这两个类的对象。创建AudioRecord和AudioTrack类对象的代码如下:AudioRecord类:

1.

2.m_in_buf_size =AudioRecord.getMinBufferSize(8000,

3. AudioFormat.CHANNEL_CONFIGURATION_MONO,

4. AudioFormat.ENCODING_PCM_16BIT);

5.

6. m_in_rec = new AudioRecord(MediaRecorder.AudioSource.MIC,

7. 8000,

8. AudioFormat.CHANNEL_CONFIGURATION_MONO,

9. AudioFormat.ENCODING_PCM_16BIT,

10. m_in_buf_size) ;

11.

1AudioTrack类:

1.m_out_buf_size = android.media.AudioTrack.getMinBufferSize(8000,

2.AudioFormat.CHANNEL_CONFIGURATION_MONO,

3.AudioFormat.ENCODING_PCM_16BIT);

4.

5.m_out_trk = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,

6.AudioFormat.CHANNEL_CONFIGURATION_MONO,

7.AudioFormat.ENCODING_PCM_16BIT,

8.m_out_buf_size,

9.AudioTrack.MODE_STREAM);

2(2)关于AudioRecord和AudioTrack类的监听函数,不用也行。

(3)调试方面,包括初始化后看logcat信息,以确定类的工作状态,初始化是否成功

等。

编写好代码,没有语法错误,调用模拟器运行、调试代码时,logcat发挥了很好的功用。刚调试时,经常会出现模拟器显示出现异常,这时我们可以在代码的一些关键语句后添加如Log.d("test1","OK");这样的语句进行标识,出现异常时我们就可以在logcat窗口观察代码执行到哪里出现异常,然后进行相应的修改、调试。模拟器不会出现异常时,又遇到了录放音的问题。录音方面,刚开始选择将语音编码数据存放在多个固定大小的文件中进行传送,但是这种情况下会出现声音断续的现象,而且要反复的建立文件,比较麻烦,后来想到要进行网上传输,直接将语音编码数据以数据流的形式传送,经过验证,这种方法可行并且使代码更加简洁。放音方面,将接收到的数据流存放在一个数组中,然后将数组中数据写到AudioTrack中。刚开始只是“嘟”几声,经过检查发现只是把数据写一次,加入循环,让数据反复写到AudioTrack中,就可以听到正常的语音了。接下来的工作主要是改善话音质量与话音延迟,在进行通话的过程中,观察logcat窗口,发现向数组中写数据时会出现Bufferflow的情况,于是把重心转移到数组大小的影响上,经过试验,发现AudioRecord一次会读640个数据,然后就对录音和放音中有数组的地方进行实验修改。AudioRecord和AudioTrack进行实例化时,参数中各有一个数组大小,经过试验这个数组大小和AudioRecord和AudioTrack能正常实例化所需的最小Buffer大小(即上面实例化时的m_in_buf_size和m_out_buf_size参数)相等且服务器方进行缓存数据的数组尺寸是上述数值的2倍时,语音质量最好。由于录音和放音的速度不一致,受到北理工大牛的启发,在录音方面,将存放录音数据的数组放到LinkedList中,当LinkedList中数组个数达到2(这个也是经过试验验证话音质量最好时的数据)时,将先录好的数组中数据传送出去。经过上述反复试验和修改,最终使双方通话质量较好,且延时较短(大概有2秒钟)。

(4)通过套接字传输和接收数据

数据传送部分,使用的是套接字。通信双方,通过不同的端口向服务器发送请求,与服务器连接上后,开始通话向服务器发送数据,服务器通过一个套接字接收到一方的数据后,先存在一个数组中,然后将该数组中数据以数据流的形式再通过另一个套接字传送到另一方。这样就实现了双方数据的传送。

(5)代码架构

为避免反复录入和读取数据占用较多资源,使程序在进行录放音时不能执行其他命令,故将录音和放音各写成一个线程类,然后在主程序中,通过MENU控制通话的开始、停止、结束。

最后说明,AudioRecord和AudioTrack类可以用,只是稍微复杂些。以下贴出双方通信的源码,希望对大家有所帮助:

主程序Daudioclient:

1.view plaincopy to clipboardprint?

2.package cn.Daudioclient;

4.import android.app.Activity;

5.import android.os.Bundle;

6.import android.view.Menu;

7.import android.view.MenuItem;

8.

9.public class Daudioclient extends Activity {

10.

11.public static final int MENU_START_ID = Menu.FIRST ;

12.public static final int MENU_STOP_ID = Menu.FIRST + 1 ;

13.public static final int MENU_EXIT_ID = Menu.FIRST + 2 ;

14.

15.protected Saudioserver m_player ;

16.protected Saudioclient m_recorder ;

17.

18.

19.@Override

20.public void onCreate(Bundle savedInstanceState) {

21.super.onCreate(savedInstanceState);

22.setContentView(https://www.sodocs.net/doc/959058757.html,yout.main);

23.}

24.

25.public boolean onCreateOptionsMenu(Menu aMenu)

26.{

27.boolean res = super.onCreateOptionsMenu(aMenu) ;

28.

29.aMenu.add(0, MENU_START_ID, 0, "START") ;

30.aMenu.add(0, MENU_STOP_ID, 0, "STOP") ;

31.aMenu.add(0, MENU_EXIT_ID, 0, "EXIT") ;

32.

33.return res ;

34.}

36.

37.public boolean onOptionsItemSelected(MenuItem aMenuItem)

38.{

39.switch (aMenuItem.getItemId()) {

40.case MENU_START_ID:

41.{

42.m_player = new Saudioserver() ;

43.m_recorder = new Saudioclient() ;

44.

45.m_player.init() ;

46.m_recorder.init() ;

47.

48.m_recorder.start() ;

49.m_player.start() ;

50.

51.}

52.break ;

53.case MENU_STOP_ID:

54.{

55.m_recorder.free() ;

56.m_player.free() ;

57.

58.m_player = null ;

59.m_recorder = null ;

60.}

61.break ;

62.case MENU_EXIT_ID:

63.{

64.int pid = android.os.Process.myPid() ;

65.android.os.Process.killProcess(pid) ;

66.}

67.break ;

68.default:

69.break ;

70.}

71.

72.return super.onOptionsItemSelected(aMenuItem);

73.}

74.}

75.package cn.Daudioclient;

76.

77.import android.app.Activity;

78.import android.os.Bundle;

79.import android.view.Menu;

80.import android.view.MenuItem;

81.

82.public class Daudioclient extends Activity {

83.

84.public static final int MENU_START_ID = Menu.FIRST ;

85.public static final int MENU_STOP_ID = Menu.FIRST + 1 ;

86.public static final int MENU_EXIT_ID = Menu.FIRST + 2 ;

87.

88.protected Saudioserver m_player ;

89.protected Saudioclient m_recorder ;

90.

91.

92.@Override

93.public void onCreate(Bundle savedInstanceState) {

94.super.onCreate(savedInstanceState);

95.setContentView(https://www.sodocs.net/doc/959058757.html,yout.main);

96.}

97.

98.public boolean onCreateOptionsMenu(Menu aMenu)

99.{

100.boolean res = super.onCreateOptionsMenu(aMenu) ;

101.

102.aMenu.add(0, MENU_START_ID, 0, "START") ;

103.aMenu.add(0, MENU_STOP_ID, 0, "STOP") ;

104.aMenu.add(0, MENU_EXIT_ID, 0, "EXIT") ;

105.

106.return res ;

107.}

108.

109.

110.public boolean onOptionsItemSelected(MenuItem aMenuItem) 111.{

112.switch (aMenuItem.getItemId()) {

113.case MENU_START_ID:

114.{

115.m_player = new Saudioserver() ;

116.m_recorder = new Saudioclient() ;

117.

118.m_player.init() ;

119.m_recorder.init() ;

120.

121.m_recorder.start() ;

122.m_player.start() ;

123.

124.}

125.break ;

126.case MENU_STOP_ID:

127.{

128.m_recorder.free() ;

129.m_player.free() ;

130.

131.m_player = null ;

132.m_recorder = null ;

133.}

134.break ;

135.case MENU_EXIT_ID:

136.{

137.int pid = android.os.Process.myPid() ;

138.android.os.Process.killProcess(pid) ;

139.}

140.break ;

141.default:

142.break ;

143.}

144.

145.return super.onOptionsItemSelected(aMenuItem);

146.}

147.}

3录音程序Saudioclient:

1.

2.package cn.Daudioclient;

3.

4.import java.io.DataOutputStream;

5.import java.io.IOException;

6.import https://www.sodocs.net/doc/959058757.html,.Socket;

7.import https://www.sodocs.net/doc/959058757.html,.UnknownHostException;

8.import java.util.LinkedList;

9.

10.import android.media.AudioFormat;

11.import android.media.AudioRecord;

12.import android.media.MediaRecorder;

13.import android.util.Log;

14.

15.public class Saudioclient extends Thread

16.{

17.

18. protected AudioRecord m_in_rec ;

19. protected int m_in_buf_size ;

20. protected byte [] m_in_bytes ;

21. protected boolean m_keep_running ;

22. protected Socket s;

23. protected DataOutputStream dout;

24. protected LinkedList m_in_q ;

25.

26. public void run()

27.{

28. try

29. {

30.byte [] bytes_pkg ;

31.m_in_rec.startRecording() ;

32.while(m_keep_running)

33.{

34. m_in_rec.read(m_in_bytes, 0, m_in_buf_size) ;

35. bytes_pkg = m_in_bytes.clone() ;

36. if(m_in_q.size() >= 2)

37. {

38. dout.write(m_in_q.removeFirst() , 0,

m_in_q.removeFirst() .length);

39. }

40. m_in_q.add(bytes_pkg) ;

41.}

42.

43.m_in_rec.stop() ;

44.m_in_rec = null ;

45.m_in_bytes = null ;

46. dout.close();

47.

48. }

49. catch(Exception e)

50. {

51. e.printStackTrace();

52. }

53. }

54.

55. public void init()

56. {

57. m_in_buf_size = AudioRecord.getMinBufferSize(8000,

58. AudioFormat.CHANNEL_CONFIGURATION_MONO,

59. AudioFormat.ENCODING_PCM_16BIT);

60.

61. m_in_rec = new AudioRecord(MediaRecorder.AudioSource.MIC,

62. 8000,

63. AudioFormat.CHANNEL_CONFIGURATION_MONO,

64. AudioFormat.ENCODING_PCM_16BIT,

65. m_in_buf_size) ;

66.

67. m_in_bytes = new byte [m_in_buf_size] ;

68.

69. m_keep_running = true ;

70. m_in_q=new LinkedList();

71.

72. try

73. {

74. s=new Socket("192.168.1.100",4332);

75. dout=new DataOutputStream(s.getOutputStream());

76. //new Thread(R1).start();

77. }

78. catch (UnknownHostException e)

79. {

80. // TODO Auto-generated catch block

81. e.printStackTrace();

82. }

83. catch (IOException e)

84. {

85. // TODO Auto-generated catch block

86. e.printStackTrace();

87. }

88.

89. }

90.

91. public void free()

92.{

93. m_keep_running = false ;

94. try {

95. Thread.sleep(1000) ;

96. } catch(Exception e) {

97. Log.d("sleep exceptions...\n","") ;

98. }

99.}

100.}

101.

102.

4AudioRecord和AudioTrack类的使用收藏

(1)创建AudioRecord和AudioTrack类对象:创建这两个类的对象比较复杂,通过对文档的反复和仔细理解,并通过多次失败的尝试,并在北理工的某个Android大牛的网上的文章启发下,我们也最终成功地创建了这两个类的对象。创建AudioRecord和AudioTrack 类对象的代码如下:

AudioRecord类:

view plaincopy to clipboardprint?

m_in_buf_size =AudioRecord.getMinBufferSize(8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT);

m_in_rec = new AudioRecord(MediaRecorder.AudioSource.MIC,

8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

m_in_buf_size) ;

AudioTrack类:

m_out_buf_size = android.media.AudioTrack.getMinBufferSize(8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT);

m_out_trk = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

m_out_buf_size,

AudioTrack.MODE_STREAM);

m_in_buf_size =AudioRecord.getMinBufferSize(8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT);

m_in_rec = new AudioRecord(MediaRecorder.AudioSource.MIC,

8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

m_in_buf_size) ;

AudioTrack类:

m_out_buf_size = android.media.AudioTrack.getMinBufferSize(8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT);

m_out_trk = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

m_out_buf_size,

AudioTrack.MODE_STREAM);

(2)关于AudioRecord和AudioTrack类的监听函数,不用也行。

(3)调试方面,包括初始化后看logcat信息,以确定类的工作状态,初始化是否成功等。

编写好代码,没有语法错误,调用模拟器运行、调试代码时,logcat发挥了很好的功用。刚调试时,经常会出现模拟器显示出现异常,这时我们可以在代码的一些关键语句后添加如Log.d("test1","OK");这样的语句进行标识,出现异常时我们就可以在logcat窗口观察代码执行到哪里出现异常,然后进行相应的修改、调试。模拟器不会出现异常时,又遇到了录放音的问题。录音方面,刚开始选择将语音编码数据存放在多个固定大小的文件中进行传送,但是这种情况下会出现声音断续的现象,而且要反复的建立文件,比较麻烦,后来想到要进行网上传输,直接将语音编码数据以数据流的形式传送,经过验证,这种方法可行并且使代码更加简洁。放音方面,将接收到的数据流存放在一个数组中,然后将数组中数据写到AudioTrack中。刚开始只是“嘟”几声,经过检查发现只是把数据写一次,加入循环,让数据反复写到AudioTrack中,就可以听到正常的语音了。接下来的工作主要是改善话音质量与话音延迟,在进行通话的过程中,观察logcat窗口,发现向数组中写数据时会出现Bufferflow的情况,于是把重心转移到数组大小的影响上,经过试验,发现AudioRecord一次会读640个数据,然后就对录音和放音中有数组的地方进行实验修改。AudioRecord和AudioTrack进行实例化时,参数中各有一个数组大小,经过试验这个数组大小和AudioRecord和AudioTrack能正常实例化所需的最小Buffer大小(即上面实例化时的m_in_buf_size和m_out_buf_size参数)相等且服务器方进行缓存数据的数组尺寸是上述数值的2倍时,语音质量最好。由于录音和放音的速度不一致,受到北理工大牛的启发,在录音方面,将存放录音数据的数组放到LinkedList中,当LinkedList中数组个数达到2(这个也是经过试验验证话音质量最好时的数据)时,将先录好的数组中数据传送出去。经过上述反复试验和修改,最终使双方通话质量较好,且延时较短(大概有2秒钟)。

(4)通过套接字传输和接收数据

数据传送部分,使用的是套接字。通信双方,通过不同的端口向服务器发送请求,与服务器连接上后,开始通话向服务器发送数据,服务器通过一个套接字接收到一方的数据后,先存在一个数组中,然后将该数组中数据以数据流的形式再通过另一个套接字传送到另一方。这样就实现了双方数据的传送。

(5)代码架构

为避免反复录入和读取数据占用较多资源,使程序在进行录放音时不能执行其他命令,故将录音和放音各写成一个线程类,然后在主程序中,通过MENU控制通话的开始、停止、

结束。

最后说明,AudioRecord和AudioTrack类可以用,只是稍微复杂些。以下贴出双方通信的源码,希望对大家有所帮助:

主程序Daudioclient:

view plaincopy to clipboardprint?

package cn.Daudioclient;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

public class Daudioclient extends Activity {

public static final int MENU_START_ID = Menu.FIRST ;

public static final int MENU_STOP_ID = Menu.FIRST + 1 ;

public static final int MENU_EXIT_ID = Menu.FIRST + 2 ;

protected Saudioserver m_player ;

protected Saudioclient m_recorder ;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.sodocs.net/doc/959058757.html,yout.main);

}

public boolean onCreateOptionsMenu(Menu aMenu)

{

boolean res = super.onCreateOptionsMenu(aMenu) ;

aMenu.add(0, MENU_START_ID, 0, "START") ;

aMenu.add(0, MENU_STOP_ID, 0, "STOP") ;

aMenu.add(0, MENU_EXIT_ID, 0, "EXIT") ;

}

public boolean onOptionsItemSelected(MenuItem aMenuItem) {

switch (aMenuItem.getItemId()) {

case MENU_START_ID:

{

m_player = new Saudioserver() ;

m_recorder = new Saudioclient() ;

m_player.init() ;

m_recorder.init() ;

m_recorder.start() ;

m_player.start() ;

}

break ;

case MENU_STOP_ID:

{

m_recorder.free() ;

m_player.free() ;

m_player = null ;

m_recorder = null ;

}

break ;

case MENU_EXIT_ID:

{

int pid = android.os.Process.myPid() ;

android.os.Process.killProcess(pid) ;

}

break ;

default:

}

return super.onOptionsItemSelected(aMenuItem);

}

}

package cn.Daudioclient;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

public class Daudioclient extends Activity {

public static final int MENU_START_ID = Menu.FIRST ;

public static final int MENU_STOP_ID = Menu.FIRST + 1 ;

public static final int MENU_EXIT_ID = Menu.FIRST + 2 ;

protected Saudioserver m_player ;

protected Saudioclient m_recorder ;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.sodocs.net/doc/959058757.html,yout.main);

}

public boolean onCreateOptionsMenu(Menu aMenu)

{

boolean res = super.onCreateOptionsMenu(aMenu) ;

aMenu.add(0, MENU_START_ID, 0, "START") ;

aMenu.add(0, MENU_STOP_ID, 0, "STOP") ;

aMenu.add(0, MENU_EXIT_ID, 0, "EXIT") ;

return res ;

}

public boolean onOptionsItemSelected(MenuItem aMenuItem) {

switch (aMenuItem.getItemId()) {

case MENU_START_ID:

{

m_player = new Saudioserver() ;

m_recorder = new Saudioclient() ;

m_player.init() ;

m_recorder.init() ;

m_recorder.start() ;

m_player.start() ;

}

break ;

case MENU_STOP_ID:

{

m_recorder.free() ;

m_player.free() ;

m_player = null ;

m_recorder = null ;

}

break ;

case MENU_EXIT_ID:

{

int pid = android.os.Process.myPid() ;

android.os.Process.killProcess(pid) ;

}

break ;

default:

break ;

}

return super.onOptionsItemSelected(aMenuItem);

}

}

录音程序Saudioclient:

view plaincopy to clipboardprint?

package cn.Daudioclient;

import java.io.DataOutputStream;

import java.io.IOException;

import https://www.sodocs.net/doc/959058757.html,.Socket;

import https://www.sodocs.net/doc/959058757.html,.UnknownHostException;

import java.util.LinkedList;

import android.media.AudioFormat;

import android.media.AudioRecord;

import android.media.MediaRecorder;

import android.util.Log;

public class Saudioclient extends Thread

{

protected AudioRecord m_in_rec ;

protected int m_in_buf_size ;

protected byte [] m_in_bytes ;

protected boolean m_keep_running ;

protected Socket s;

protected DataOutputStream dout;

protected LinkedList m_in_q ;

public void run()

{

try

{

byte [] bytes_pkg ;

m_in_rec.startRecording() ;

while(m_keep_running)

{

m_in_rec.read(m_in_bytes, 0, m_in_buf_size) ;

bytes_pkg = m_in_bytes.clone() ;

if(m_in_q.size() >= 2)

{

dout.write(m_in_q.removeFirst() , 0,

m_in_q.removeFirst() .length);

}

m_in_q.add(bytes_pkg) ;

}

m_in_rec.stop() ;

m_in_rec = null ;

m_in_bytes = null ;

dout.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

public void init()

{

m_in_buf_size = AudioRecord.getMinBufferSize(8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT);

m_in_rec = new AudioRecord(MediaRecorder.AudioSource.MIC,

8000,

AudioFormat.CHANNEL_CONFIGURATION_MONO,

AudioFormat.ENCODING_PCM_16BIT,

m_in_buf_size) ;

m_in_bytes = new byte [m_in_buf_size] ;

m_keep_running = true ;

m_in_q=new LinkedList();

try

{

s=new Socket("192.168.1.100",4332);

dout=new DataOutputStream(s.getOutputStream()); //new Thread(R1).start();

}

catch (UnknownHostException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void free()

{

m_keep_running = false ;

try {

Thread.sleep(1000) ;

} catch(Exception e) {

Log.d("sleep exceptions...\n","") ;

}

}

}

package cn.Daudioclient;

import java.io.DataOutputStream;

import java.io.IOException;

import https://www.sodocs.net/doc/959058757.html,.Socket;

import https://www.sodocs.net/doc/959058757.html,.UnknownHostException;

import java.util.LinkedList;

import android.media.AudioFormat;

import android.media.AudioRecord;

import android.media.MediaRecorder;

import android.util.Log;

public class Saudioclient extends Thread

{

protected AudioRecord m_in_rec ;

protected int m_in_buf_size ;

protected byte [] m_in_bytes ;

protected boolean m_keep_running ;

protected Socket s;

protected DataOutputStream dout;

protected LinkedList m_in_q ;

public void run()

{

try

{

byte [] bytes_pkg ;

m_in_rec.startRecording() ;

while(m_keep_running)

{

m_in_rec.read(m_in_bytes, 0, m_in_buf_size) ;

bytes_pkg = m_in_bytes.clone() ;

if(m_in_q.size() >= 2)

{

dout.write(m_in_q.removeFirst() , 0, m_in_q.removeFirst() .length);

}

m_in_q.add(bytes_pkg) ;

}

m_in_rec.stop() ;

m_in_rec = null ;

m_in_bytes = null ;

dout.close();

类的定义和对象的创建

实验二类的定义和对象的创建 实验目的 1、学习定义类和使用类 2、学习创建的对象和使用对象 实验内容 1、定义一个Student类。其中定义有“学号”“姓名”“班级”“性别”“年龄”等属性,定 义一个无参数的构造器和至少一个有参数的构造器,定义“获得学号”“获得姓名”“获得班级”“获得性别”“获得年龄”“修改年龄”等方法。另外定义一个方法: public String toString( ) 把Student类的对象的所有属性信息组合成一个字符串,并检验这个功能的程序体现。 public class Student { private int 学号; private String 姓名; private String 班级; private char 性别; private int 年龄; public Student(int a, String b, String c, char d, int e) { 学号= a; 姓名= b; 班级= c; 性别= d; 年龄= e; } public Strudent() { this(0, "张三" ,"软件0901" ,'男', 19); } public int get学号() { return 学号; } public String get姓名() { return 姓名; } public String get班级() { return 班级; } public char get性别() { return 性别; } public int get年龄()

{ return 年龄; } public void set学号(int a) { 学号=a; } public void set姓名(String a ) { 姓名=a; } public void set班级(String a) { 班级= a; } public void set性别( char a) { 性别= a ; } public void set年龄(int a) { 年龄= a; } public String toString() { return "该学生的学号为"+ 学号+ " 姓名为"+姓名+" 班级为"+班级+ " 性别为" +性别+ " 年龄为" +年龄"; } } 2、编程实现圆类,其中包括计算圆周长和面积的方法,并测试方法的正确性。 public class Yuan { private double X, Y, R; public Yuan(double a, double b, double c) { X=a; Y=b; R=c; } public double MianJi() { return 3.1416*R*R; } public double ZhouChang() { return 2*3.1416*R; } public static void main(String[] args) { Yuan s=new Yuan(2,3,4); System.out.println("该圆的面积是"+ s.MianJi()); System.out.println("该圆的周长是"+ s.ZhouChang()); } }

C语言的类和对象

C语言的类和对象 【类实现了C++面向对象程序设计的基础,我们使用类来定义对象的属性,类是 C++封装的基本单元。】 一、----- 类 使用关键字class创建类,一个类声明定义了一个连接代码和一个数据的新类型,这个新的类型又可以用来声明该类的对象。因此,类又是逻辑逻辑抽象概念,儿对象是物理存在的,也就是说对象是类的实例。 类的声明语法上和结构相似。 [一下是完整的类的形式] class class_name { private data and functions access_specifier: data and functions access_specifiter: data and functions //…….. access_specifier:是 data and functions }object_list; 其中,object_list是任选项,如过存在,他声明类的对象。access_specifier为下面的三个关键字之一: Public private protected 默认时,在类声明的函数和数据属于该类私有,只能被该类的成员访问。如果使用,pubilc访问限定符号,函数和程序就可以被其他部分访问。Protected访问限定符,仅在涉及继承的时候才需要(十五章了解)。访问限定符已经使用,其作用就保持到遇到别的访问限定符或者达到类声明的结束处。 在类声明内可以任意改变访问说明符号,对于某些声明,可以转换位public,然后再转换成private。 [如下所述] /******************************* ··构造函数和析构函数学习··· *******************************/ //Using a constructor and destructor. /******************************* 声明C++ 程序头文件 *******************************/ #include #include #include #include /******************************* ·名字空间:组织大型的程序结构·

javamath类常用方法

例如求平方根的(n),求a的b次方(a, b),求绝对值(n)等很多。下面是一些演示。publicclassMathTest { publicstaticvoidmain(String[]args) { intn=16; ? 3)); ? ? } } publicclassMathDemo{ publicstaticvoidmain(Stringargs[]){ /** *abs求绝对值 */ 的时候会取偶数 */ // // // // // // // // // // /** *round四舍五入,float时返回int值,double时返回long值 */ //10 //11 //11 //11 //-10 //-11 //-11 //-10 } }

函数(方法) 描述 IEEEremainder(double,double) 按照IEEE754标准的规定,对两个参数进行余数运算。 abs(inta) 返回int值的绝对值 abs(longa) 返回long值的绝对值 abs(floata) 返回float值的绝对值 abs(doublea) 返回double值的绝对值 acos(doublea) 返回角的反余弦,范围在到pi之间 asin(doublea) 返回角的反正弦,范围在-pi/2到pi/2之间 atan(doublea) 返回角的反正切,范围在-pi/2到pi/2之间 atan2(doublea,doubleb) 将矩形坐标(x,y)转换成极坐标(r,theta) ceil(doublea) 返回最小的(最接近负无穷大)double值,该值大于或等于参数,并且等于某个整数cos(double) 返回角的三角余弦 exp(doublea) 返回欧拉数e的double次幂的值 floor(doublea) 返回最大的(最接近正无穷大)double值,该值小于或等于参数,并且等于某个整数log(doublea) 返回(底数是e)double值的自然对数 max(inta,intb) 返回两个int值中较大的一个 max(longa,longb) 返回两个long值中较大的一个 max(floata,floatb) 返回两个float值中较大的一个 max(doublea,doubleb) 返回两个double值中较大的一个 min(inta,intb) 返回两个int值中较小的一个 min(longa,longb) 返回两个long值中较小的一个 min(floata,floatb)

类和对象练习题

类和对象 一、选择题 1、下面对方法的作用描述不正确的是:( d ) A、使程序结构清晰 B、功能复用 C、代码简洁 D、重复代码 2、方法定义的变量:( b ) A 、一定在方法所有位置可见B、可能在方法的局部位置可见 C、在方法外可以使用 D、在方法外可见 3、方法的形参:(a) A、可以没有 B、至少有一个 C、必须定义多个形参 D、只能是简单变量 4、方法的调用:(c) A、必须是一条完整的语句 B、只能是一个表达式 C、可能是语句,也可能是表达式 D、必须提供实际参数 5、return 语句:( d) A、不能用来返回对象 B、只可以返回数值 C、方法都必须含有 D、一个方法中可以有多个return 语句 6、void 的含义:(d) A、方法体为空 B、方法体没有意义 C、定义方法时必须使用 D、方法没有返回值 7、main()方法的返回类型是:( c ) A 、boolean B、int C、void D、static 8、方法重载所涉及的方法:( a ) A、有相同的名字 B、参数个数必须不同 C、参数类型必须不同 D、返回类型必须不同 9、下面关于类和对象之间关系的描述,正确的是( c ) A、联接关系B、包含关系C、具体与抽象的关系D、类是对象的具体化 10、下面关于java中类的说法哪个是不正确的( c ) A、类体中只能有变量定义和成员方法的定义,不能有其他语句。 B、构造方法是类中的特殊方法。 C、类一定要声明为public的,才可以执行。

D、一个java文件中可以有多个class定义。 11、下列哪个类声明是正确的( d) A、public void H1{…} B 、public class Move(){…} C、public class void number{} D、public class Car{…} 12、下面的方法声明中,哪个是正确的(c) A、public class methodName(){} B、public void int methodName(){} C、public void methodName(){} D、public void methodName{} 13、下述哪些说法是不正确的?( b ) A、实例变量是类的成员变量 B、实例变量是用static关键字声明的 C、方法变量在方法执行时创建 D、方法变量在使用之前必须初始化 14、下面对构造方法的描述不正确是( b)。 A、系统提供默认的构造方法 B、构造方法可以有参数,所以也可以有返回值 C、构造方法可以重载 D、构造方法可以设置参数 15、定义类头时,不可能用到的关键字是( b)。 A、class B、private C、extends D、public 16、下列类头定义中,错误的是( )。 A、public x extends y {...} B、public class x extends y {...} C、class x extends y implements y1 {...} D、class x {...} 17、设A为已定义的类名,下列声明A类的对象a的语句中正确的是( ) 。 A、float A a; B、public A a=A( ); C、A a=new int( ); D、static A a=new A( ); 18、设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( a )。 A、void X(int k ){ i=k; } B、X(int k ){ i=k; } C、X(int m, int n ){ i=m; j=n; } D、X( ){i=0;j=0; } 19、有一个类A,以下为其构造方法的声明,其中正确的是

JAVA中常用类的常用方法

JAVA中常用类的常用方法 一、类 1、clone()方法 创建并返回此对象的一个副本。要进行“ 克隆” 的对象所属的类必须实现. Cloneable接口。 2、equals(Object obj)方法 功能:比较引用类型数据的等价性。 等价标准:引用类型比较引用,基本类型比较值。 存在特例:对File、String、Date及封装类等类型来说,是比较类型及对象的内 容而不考虑引用的是否为同一实例。 3、finalize()方法 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 4、hashCode()方法 返回该对象的哈希码值。 5、notify()方法 唤醒在此对象监视器上等待的单个线程。 6、notifyAll()方法 唤醒在此对象监视器上等待的所有线程。 7、toString()方法 返回该对象的字符串表示。在进行String与其它类型数据的连接操作时,自动调用toString()方法。可以根据需要重写toString()方法。 8、wait()方法 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 二、字符串相关类 String类 charAt(int index) 返回指定索引处的 char 值。 compareTo(String anotherString) 按字典顺序比较两个字符串。 compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 concat(String str) 将指定字符串连接到此字符串的结尾。 endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 equals(Object anObject) 将此字符串与指定的对象比较。 equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比 较,不考虑大小写。 indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 indexOf(String str) 返回第一次出现的指定子字符串在此字符串中的索引。 lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 length() 返回此字符串的长度。 replace(char oldChar, char newChar)

类与对象

类与对象1:Point类1 Description 定义一个Point类,数据成员包括私有数据成员为double类型的点坐标x,y;成员函数包括构造函数Point(用于实现对数据成员x,y的初始化),成员函数Display(用于输出点坐标x、y,输出格式为点坐标用逗号分隔并半角圆括号括起来)。 main函数如下(不得修改main函数): int main() { double x,y; cin>>x>>y; Point p1(x,y); p1.Display(); return 0; } Input Output Sample Input 12.5 22.7 Sample Output (12.5,22.7) ************************************************** #include using namespace std; class Point { public: Point(double xx,double yy) { x=xx;y=yy; } void Display() { cout<<"("<>x>>y; Point p1(x,y); p1.Display(); return 0; } 类与对象2:Point类2 Description

定义一个Point类,数据成员包括私有数据成员为double类型的点坐标x,y;成员函数包括构造函数Point(用于实现对数据成员x,y的初始化)、成员函数Set(用于改变数据成员x、y的值)、成员函数Display(用于输出点坐标x、y,输出格式为点坐标用逗号分隔并半角圆括号括起来)。 main函数如下(不得修改main函数): int main() { double x1,y1,x2,y2; cin>>x1>>y1; cin>>x2>>y2; Point p1(x1,y1); p1.Display(); p1.Set(x2,y2); p1.Display(); return 0; } Input Output Sample Input 10 25.5 5.5 20 Sample Output (10,25.5) (5.5,20) ************************************************** #include using namespace std; class Point { public: Point(double xx,double yy) { x=xx;y=yy; } void Display() { cout<<"("<>x1>>y1; cin>>x2>>y2;

JAVA中常用类的常用方法

JAVA屮常用类的常用方法 一.java?丨ang.Object 类 1、clone()方法 创建丼返M此对象的一个副木。要进行“克隆”的对象所属的类必须实现https://www.sodocs.net/doc/959058757.html,ng. Cloneable 接口。 2、equals(Objectobj)方法 0 功能:比较引用类型数据的等价性。 0 等价标准.?引用类型比较引用,基木类型比较值。 0 存在特例.?对File、String、Date及封装类等类型来说,是比较类型及对象的内稃而+ 考虑引用的是否为同一实例。 3、finalize〇方法 当垃圾丨"丨收器确定>(、存在对该对象的更多引用时,由对象的垃圾丨"丨收器调用此方法。 4、hashCode〇方法返 回该对象的哈希码值。 5、notify〇方法 唤醒在此对象监视器上等待的中?个线祝。 6、notifyAII〇方法 唤醒在此对象监视器上等待的所有线程= 7、toString()方法 返W该对象的字符串表示。在进行String与其它类型数据的连接操作时,&动调用tostringo 方法。可以根据耑要重写toStringO方法。 8、wait()方法 在其他线程调用此对象的n〇tify()方法或notifyAIIO方法前,异致当前线程等待。 二、字符串相关类 I String 类 charAt(int index)返回指定索引处的char值。compareTo{String anotherString)按字

典顺序比较两个字符串。compareTolgnoreCase(Stringstr)按字典顺序比较两个字 符串,不考虑人小写。concat(String str)将指定字符串连接到此字符串的结尾。 endsWith(String suffix)测试此字符串是否以指定的〗?缀结束。equals{Object anObject)将此字符串与指定的对象比较。 equalslgnoreCase(String anotherString)将此String 与另一个String 比较,考虑人小'与’。indexOf(int ch)返H指定字符在此字符串屮第一次出现处的索引。 indexOf(String str)返回第一次出现的指定子字符串在此字符串屮的索引, lastlndexOf(intch)返回指定字符在此字符串中最后??次出现处的索引。 length()返|n丨此字符串的长度。 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。 split(String regex)根据给定正则表达式的匹配拆分此字符串。startsWith{String prefix)测试此字符 串是否以指定的前缀开始。substring(int beginlndex) 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。 substring(int beginlndex, int endlndex) 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的beginlndex 处开始,一直到索引endlndex-1处的字符。 t〇CharArray()将此字符串转换为一个新的字符数组。

实验5 JAVA常用类

山西大学计算机与信息技术学院 实验报告 姓名学号专业班级 课程名称 Java实验实验日期成绩指导教师批改日期 实验5 JAVA常用类实验名称 一.实验目的: (1)掌握常用的String,StringBuffer(StringBuilder)类的构造方法的使用;(2)掌握字符串的比较方法,尤其equals方法和==比较的区别; (3)掌握String类常用方法的使用; (4)掌握字符串与字符数组和byte数组之间的转换方法; (5)Date,Math,PrintWriter,Scanner类的常用方法。 二.实验内容 1.二进制数转换为十六进制数(此程序参考例题249页9. 2.13) 程序源代码 import java.util.*; public class BinToHexConversion{ //二进制转化为十六进制的方法 public static String binToHex(String bin){ int temp; //二进制转化为十六进制的位数 if(bin.length()%4==0) temp = bin.length()/4; else temp = bin.length()/4 + 1; char []hex = new char[temp]; //十六进制数的字符形式 int []hexDec = new int[temp];//十六进制数的十进制数形式 int j = 0; for(int i=0;i=0&&dec<10) return (char)('0'+dec-0); else if(dec>=10&&dec<=15) return (char)('A'+dec-10); else return '@'; }

JAVA中常用类的常用方法

JAVA中常用类的常用方法 一、https://www.sodocs.net/doc/959058757.html,ng.Object类 1、clone()方法 创建并返回此对象的一个副本。要进行“克隆”的对象所属的类必须实现https://www.sodocs.net/doc/959058757.html,ng. Cloneable接口。 2、equals(Object obj)方法 ?功能:比较引用类型数据的等价性。 ?等价标准:引用类型比较引用,基本类型比较值。 ?存在特例:对、Date及封装类等类型来说,是比较类型及对象的内容而不考虑引用的是否为同一实例。 3、finalize()方法 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 4、hashCode()方法返回该对象的哈希码值。 5、notify()方法唤醒在此对象监视器上等待的单个线程。 6、notifyAll()方法唤醒在此对象监视器上等待的所有线程。 7、toString()方法 返回该对象的字符串表示。在进行String与其它类型数据的连接操作时,自动调用toString()方法。可以根据需要重写toString()方法。 8、wait()方法 在其他线程调用此对象的notify() 方法或notifyAll() 方法前,导致当前线程等待。 二、字符串相关类 l String类 charAt(int index) 返回指定索引处的char 值。 compareTo(String anotherString) 按字典顺序比较两个字符串。 compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 concat(String str) 将指定字符串连接到此字符串的结尾。 endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 equals(Object anObject) 将此字符串与指定的对象比较。 equalsIgnoreCase(String anotherString) 将此String 与另一个String 比较,不考虑大小写。indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 indexOf(String str) 返回第一次出现的指定子字符串在此字符串中的索引。 lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 length() 返回此字符串的长度。 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar 得到的。split(String regex) 根据给定正则表达式的匹配拆分此字符串。 startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。 substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的beginIndex 处开

JavaMath类常用方法

例如求平方根的Math.sqrt(n),求a的b次方Math.pow(a, b),求绝对值Math.abs(n)等很多。下面是一些演示。 public class MathTest { public static void main(String[] args) { int n = 16; System.out.println(Math.sqrt(n)); System.out.println(Math.pow(2, 3)); System.out.println(Math.abs(-4)); System.out.println(Math.log10(100)); } } public class MathDemo { public static void main(String args[]){ /** * abs求绝对值 */ System.out.println(Math.abs(-10.4)); //10.4 System.out.println(Math.abs(10.1)); //10.1 /** * ceil天花板的意思,就是返回大的值,注意一些特殊值 */ System.out.println(Math.ceil(-10.1)); //-10.0 System.out.println(Math.ceil(10.7)); //11.0 System.out.println(Math.ceil(-0.7)); //-0.0 System.out.println(Math.ceil(0.0)); //0.0 System.out.println(Math.ceil(-0.0)); //-0.0 /** * floor地板的意思,就是返回小的值 */ System.out.println(Math.floor(-10.1)); //-11.0 System.out.println(Math.floor(10.7)); //10.0 System.out.println(Math.floor(-0.7)); //-1.0

java中常用的一些方法

java中常用的一些方法 字符串 1、获取字符串的长度 length() 2 、判断字符串的前缀或后缀与已知字符串是否相同 前缀startsWith(String s) 后缀endsWith(String s) 3、比较两个字符串 equals(String s) 4、把字符串转化为相应的数值 int型Integer.parseInt(字符串) long型Long.parseLong(字符串) float型Folat.valueOf(字符串).floatValue() double型Double.valueOf(字符串).doubleValue() 4、将数值转化为字符串 valueOf(数值) 5、字符串检索 indexOf(Srting s) 从头开始检索 indexOf(String s ,int startpoint) 从startpoint处开始检索 如果没有检索到,将返回-1 6、得到字符串的子字符串 substring(int startpoint) 从startpoint处开始获取 substring(int start,int end) 从start到end中间的字符 7、替换字符串中的字符,去掉字符串前后空格 replace(char old,char new) 用new替换old trim() 8、分析字符串 StringTokenizer(String s) 构造一个分析器,使用默认分隔字符(空格,换行,回车,Tab,进纸符)StringTokenizer(String s,String delim) delim是自己定义的分隔符

nextToken() 逐个获取字符串中的语言符号 boolean hasMoreTokens() 只要字符串还有语言符号将返回true,否则返回false countTokens() 得到一共有多少个语言符号 文本框和文本区 1、文本框 TextField() 构造文本框,一个字符长 TextField(int x) 构造文本框,x个字符长 TextField(String s) 构造文本框,显示s setText(String s) 设置文本为s getText() 获取文本 setEchoChar(char c) 设置显示字符为c setEditable(boolean) 设置文本框是否可以被修改 addActionListener() 添加监视器 removeActionListener() 移去监视器 2、文本区 TextArea() 构造文本区 TextArea(String s) 构造文本区,显示s TextArea(String s,int x,int y) 构造文本区,x行,y列,显示s TextArea(int x,int y) 构造文本区,x行,y列 TextArea(String s,int x,ing y,int scrollbar) scrollbar的值是: TextArea.SCROLLBARS_BOTH TextArea.SCROLLBARS_VERTICAL_ONLY TextArea.SCROLLBARS_HORIZONTAL_ONLY TextArea.SCROLLBARS_NONE setText(String s) 设置文本为s

实体、对象与类的概念

1、实体、对象与类的概念 2、类的定义 3、对象声明与引用 4、私有、公有与保护 5、日期类的设计 6、两种程序设计思想 7、汽车类的设计 8、几何图形圆类的设计 9、构造函数的定义10、重载构造函数11、析构函数的定义12、整数翻译函数13、实际意义的析构函数14、Person类的设计15、对象与指针16、this指针

?实体:指客观世界存在的某个事物?一所大学,例如:西安交通大学 ?某动物,例如:一只羊 ?一本图书,例如:《C++程序设计教程》?一篇文章,例如:“羊年趣赏羊联” ?一个专业班级,例如:材料21班 ?一名学生,例如:材料21班的蒋贵川?……

?可以拍摄视频描述实体 ?也可以写一篇文章描述实体 ?我们设计的程序都是为了求解某个(些)问题 ?如果求解的问题中涉及到某个实体,那么在程序中如何描述实体呢? ?通过对实体进行抽象,来描述实体

?每个实体都有其特征和功能,特征和功能通称为属性?实体与实体的不同在于属性的不同 ?所谓抽象描述实体是指: ?从实体中抽取出若干特征和功能,来表示实体 ?特征指实体的静态属性,功能指实体的动态属性 ?对实体加以抽象要注意下面两点: ?移出细节看主干 ?不是借助具体形象反映现实,而是以抽象表达科学的真实

毕加索画《牛》 1945年12月5日 1946年1月17日 ?形体逐渐概括 ?线条逐步简练 ?别人认为的终点,他 作为起点 ?每幅画不重复 ?精炼地表现了公牛的

?电视机的特征:?型号?尺寸?液晶?价格? ……?电视机的功能: ?播放影视?选频道?调颜色?调音量?……

JAVA类与对象的创建

试验四 类和对象的创建 一.类的定义 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类用来定义对象的模板。 类的实现包括两部分:类声明和类体。基本格式为: 修饰符class类名[extends父类名]{ /*类体的内容*/ } 1.类声明 以下是一个类声明的例子。 class People成为类声明,People是类名。习惯上,类名的第一个字母大写,但这不是必须的。类的名字不能是Java中的关键字,要符合标识符规定,即类的名字可以由字母、下划线、数字或美元符号组成,并且第一个字母不能是数字。但给类命名时,最好遵守下列规则: (1)如果类名使用拉丁字母,那么名字的首写字母使用大写字母,如Hello、Time、People等。 (2)类名最好容易识别,当类名由几个“单词”复合而成时,每个单词的首写字母使用大写,如BeijingTi me、AmericanGame、HelloChina等。 2.类体 编写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“{”、“}”以及它们之间的内容称为类体,大括号之间的内容称为类体的内容。 类体的内容由两部分构成:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。 下面是一个类名为“Trapezia”的类,类体内容的变量定义部分定义了4个float类型变量:top、bottom、h igh和laderArea,方法定义部分定义了两个方法:“getArea”和“setHigh”。

二.对象 1.对象的创建 创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。 一般格式为: 类的名字对象名字; 如: 这里People是类的名字,zhubajie是我们声明的对象的名字。 (2)为声明的对象分配内存。 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(你一定还记得构造方法的名字必须和类名相同这一规定),如: 例1: 「注」如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法。 2.对象的使用 对象不仅可以改变自己变量的状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。 例2:

类与对象答案

类与对象 知识要点 1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。 2.掌握构造函数的概念、定义方法和使用方法。 3.掌握析构函数的概念、定义方法和使用方法。 4.掌握拷贝构造函数的概念、定义方法和使用方法。 5.掌握包含对象成员的类构造函数的定义方法。 6.掌握静态成员的概念、定义方法、作用和特点。 7.掌握友元的概念、定义方法、作用和特点。 8.掌握类模板的定义格式与使用方法。 典型例题分析与解答 例题1:下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 例题2:下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数), X::~X() C.X::X(参数), X::~X(参数) D.void X::X(参数), void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 例题3:()的功能是对象进行初始化。 A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 例题4:下列表达方式正确的是()。 A.class P{ B. class P{ public: public: int x=15; int x; void show(){cout<

类与对象的复习与练习

一选择题 1.下面方法定义中,正确的是: A)int x(int a,b){return a-b;} B)double x(int a,int b){int w;w=a-b;} C)double x(a,b){return b;} D)int x(int a,int b){return a-b;} 2.下面方法定义中,不正确的是: A)float x(int a,int b){return a-b;} B)int x(int a,int b){return a-b;} C)int x(int a,int b){return a*b;} D)int x(int a,int b){return 1.2*(a-b);} 3下面方法定义中,正确的是: A)int x(){char ch='a';return (int)ch;} B)void x(){return true;} C)int x(){return true;} D)int x(int a,b){return a-b;} 4设X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是? X x1=new X(); B)X x1= X ( ); C)X x1=new Y( ); D)int X x1; 5设A为已定义的类名,下列声明并创建A 类的对象a的语句中正确的是?

A)A a=new A( ); B)public A a=A( ); B)C)A a=new class( ); D)a A; 6下面类的定义中结构正确的是? A)class A B)class 2A C)int class A D)public class A () 7下面关于类的结构的说法正确的是? A)类只能包含一个构造方法 B)类可以没有属性 C)类只能包含方法 D)类只能包含属性 8下面哪个关键字在定义类头时用不到? A)class B)public C)extends D)int33 9 this在程序中代表的是? A)类的对象 B)属性 C)方法 D)父类 10下列对构造方法的调用方式的描述中正确的是? A)使用new调用 B)使用类名调用 C)使用对象名调用

java常用类知识点总结

java常用类知识点总结 Java常用类 要求: 1、掌握String和StringBuffer的区别,可以熟练使用String和StringBuffer的各 种方法进行相关操作。 2、能够自己编写一个得到日期的操作类,并将日期进行格式化操作。 3、掌握比较器及其基本原理,并可以通过比较器进行对象数组的比较操作。 4、掌握对象克隆技术及其实现 5、能够灵活应用正则表达式对字符串的组成进行判断 6、掌握Math、Random、基本数据类型的包装类的使用 7、描述出Object System对垃圾收集的支持 8、使用NumberFormat、DecimalFormat、BigInteger、BigDecimal进行数字的操 作 String和StringBuffer String的内容一旦声明不可改变,如果要改变,改变的是String的引用地址,如果一个字符串要经常改变,必须使用StringBuffer。 在一个字符串内容需要频繁修改时,使用StringBuffer可以提升操作性能,因为StringBuffer内容可以改变,而String内容不可改变。StringBuffer支持的方法大部分与String类似。 StringBuffer常见用法: (1) 字符串的连接操作

String类可以通过“+“进行字符串的连接,而StringBuffer中却只能使用append方法进行字符串的连接,而且此方法返回一个StringBuffer类的实例,这样就可以采用代码链的形式一直调用append方法。 (2) 在任意位置处为StringBuffer添加内容 可以使用insert方法在指定位置上为StringBuffer添加内容 字符串的反转操作(较为常见的操作,使用reverse方法) (3) 替换指定范围的内容 replace方法可对指定范围的内容进行替换。在String中如果要替换,使用的是replaceAll (4) 字符串截取(使用subString方法从指定范围中截取内容) (5) 删除指定范围的字符串(使用delete方法删除指定范围内容) (6) 查找指定内容是否存在(indexOf查找指定内容,查找到返回内容的位置, 没查到返回-1) 问题:(1)String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有, 没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢,答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改, 或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符

相关主题