在日常学习、工作或生活中,大家总少不了接触作文或者范文吧,通过文章可以把我们那些零零散散的思想,聚集在一块。范文怎么写才能发挥它最大的作用呢?接下来小编就给大家介绍一下优秀的范文该怎么写,我们一起来看一看吧。
oop 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象有三大特性,分别是:封装、继承、多态。封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。任何类都可以从另外一个类继承,即这个类拥有它所继承类的所有成员。被继承的类称为父类或基类。c# 只支持单继承,不支持多重继承,即在c# 中一次只允许继承一个类,不能同时继承多个类。在c# 中,接口允许多继承,可以通过继承多个接口来实现类似于c++中的多重继承。
多态是同一个类在不同场合下表现出不同的行为特征。
使用抽象方法与虚方法都可以实现多态性。抽象方法是一个未实现的方法,使用abstract关键字修饰,含有抽象方法的类必然是抽象类。抽象方法要在其子方法中通过override关键字重写。
简单工厂模式用于在调用者不知道对象属于哪个自雷的情况下,创建不同的对象。
第一章
面向对象开发方法概述
1.面向对象的软件开发有哪些优点?
1)
把软件系统看成是各种对象的集合,这更接近人类的自然思维方式。
2)
软件需求的变动性往往是功能的变动,而功能的执行者——对象,一般不会有多大的变化,比结构化更稳定。
3)
对象包括属性和行为,对象把数据及方法的具体实现方式一起封装起来,使得方法与之相关的数据不再分析,提高了每个子系统的相对对立性,从而提高软件的可维护性。
4)
支持封装,抽象,继承和多态。提高了软件的可重用性,可维护性和可扩展性。
2.在软件系统中,为什么说一个孤立的不对外提供任何服务的对象是没有意义的?
1)
每个对象都具有特定的功能,相对于其他对象而言,它的功能就是为其他对象提供的服务。
2)
从使用者角度出发,整个软件系统就是一个服务的提供者。
3)
在系统内部,每个子系统也都是服务的提供者,它们其他子系统提供服务。
4)
因此说一个孤立的部队为提供任何服务的系统是美欧任何意义的。
3.列举一些现实生活中的例子,来说明什么是依赖关系、什么是聚集关系,以及什么是关联关系。
1)
关联关系:关联是指类之间的特定对应关系,可以分为单向关联和双向关联,也可以分为一对一关联、一对多关联以及多对多关联。a关联b,是指class a与class b之间存在特定的对应关系。举例如学生和老师,订单和客户。
2)
依赖关系:类之间的调用关系。a依赖b,class a访问class b提供的服务。如panel与shape的关系。
3)
聚集关系:是整体与部分之间的关系
4.列举一些显示生活中的例子,来说明什么是封装,什么是接口。
1)
接口:对象中所有向使用者公开的方法的声明构成了对象的接口。
2)
封装:隐藏对象的属性和实现细节,仅仅对外公开接口。
3)
接口的优点:a.提高系统之间松散耦合b.提高了系统的可扩展性。
4)
封装的有点:
a.便于使用者正确、方便地理解和使用系统,防止使用者错误修改系统的属性。
b.有助于建立各个系统之间的松耦合关系,提高系统的独立性。
c.提高软件的可重用性,没个系统都是一个相对独立的整体,可以在多种环境中得到重用。
d.降低构建大型系统的风险,即使整个系统不成功,个别的独立子系统有可能依然有价值。
5.抽象的最主要特征是什么?
抽象是指从特定角度出发,从已经存在的一些事物中抽取我们所关注的特性,形成一个新的事物的思维过程。
6.在建立对象模型时,要经历哪些抽象思维过程?
1)
从问题领域的事物到软件模型中对象的抽象。
2)
从对象到类的抽象。
3)
从子类到父类的抽象
7.类就是程序员自定义的类型。这种说法是否正确?
不正确,类是一组具有相同属性和行为的对象的抽象。类及类的关系构成了对象模型的主要内容。开发人员需要根据先识别对象,然后再进行分类(创建任意的数据模型)的思路来建立对象模型。
8.小王本来体重70kg,经过减肥,体重降到45kg,试从这个问题领域中识别对象、类、属性、状态和状态的变化。
1)
类:人。
2)
对象:小王。
3)
属性:体重。
4)
状态:70kg。
5)
状态的变化:小王的减肥行为导致体重下降。
9.在uml图中哪些框图描述了系统的动态结构,哪些框图描述了系统的静态结构?
1)
用例图、类框图、组件图、部署图构成了系统的静态模型。
2)
状态转换图、时序图、协作图则构成了系统的动态模型。
第二章
第一个java应用
1.把一个类放在包里有什么用?
答:把类分包的作用:
(1)
能够区分名字相同的类
(2)
有助于实施访问权限控制
(3)
有助于划分和组织java应用中的各个类
c文档是不是为软件的终端用户提供的使用指南?
答:不是的,javadoc文档是供java开发人员阅读的,他们通过javadoc文档来了解其他开发人员开发的类的用法。java开发人员应该养成经常阅读javadoc文档的良好习惯。
3.对于n类,使用以下命令进行编译,文件位于什么目录下?
java –d c:classes –sourcepath c:src c:
答:将会存放在c:classescomabcdollapp下。
4.对于以上编译出来的appmain类,以下哪个java命令能正确运行它?
(a)
java c:
(b)
java –classpath c:classes appmain
(c)
java –classpath c:classescomabcdollapp appmain
(d)
java –classpath c:classes n
答:(b)
5.以下哪些main()方法的声明能够作为程序的入口方法?
(a)
public static void main()
(b)
public static void main(string[] string)
(c)
public static void main(string args)
(d)
static public int main(string[] args)
(e)
static void main(string[] args)
答:(b),主函数必须以public static void形式存在,参数必须为string数组形式。
文件中,哪些程序代码能够编译通过?
(a)
import .*;package mypackage;
class myclass{};
(b)
package mypackage;
import .*;
class myclass{};
(c)
/*this is comment*/
package mypackage;
import .*;
public class myclass{};
答:(c),程序顺序必须按照import, package, class走,源文件必须以public类型的类命名。
7.对于以下myprog类,运行命令”java myprog good morning”,将会得到打印结果?
public class myprog {
public static void main(string argv[])
{
n(argv[2]);
} }
答:打印结果为空。argv[0] = “good”, argv[1] = “morning”。
8.下面哪些是java的关键字?
(a)
default
(b)
null
(c)
string
(d)
throws
(e)
long
(f)
true
答:(a),(d),(e),(f),java中所有的关键字都是小写。
9.当appmain类的main()方法创建了5个doll对象时,运行时数据区的数据如何分布的?参考2.4节的图2-13,画出此时运行时数据区的状态图。
运行时数据区(内存)
java栈区
执行main()方法的主线程的方法调用栈
局部变量beibei
局部变量jingjing
局部变量huanhuan
局部变量yingying
局部变量nini
堆区
doll实例
name:贝贝
doll实例
name:晶晶
doll实例
name:欢欢
doll实例
name:迎迎
doll实例
name:妮妮
方法区
doll类型信息
appmain类型信息
(包含main()方法信息)
10.下面哪些是合法的java标识符?
(a)
#_pound
(b)
_underscore
(c)
5interstate
(d)
interstate5
(e)
_5_
(f)
class
答:(b),(d),(e)标识符命名规则如下:
(1)
标识符首字母必须为字母、下划线“_”、美元“$”、人民币“¥”(2)
标识符由数字、大写字母、小写字母、下划线以及美元等组成
(3)
不能把关键字和保留字作为标识符
(4)
标识符没有长度的限制
(5)
标识符是大小写敏感的第三章
数据类型和变量
1.对于以下程序,运行“java abs”,将得到什么打印结果?
public class abs
{
static int a = 0x11;
//十六进制
static int b = 0011;
//八进制
static int c = 'u0011';
//十六进制数据的unicode字符编码
static int d = 011;
//八进制
/**
* @param args
*/
public static void main(string[] args)
{
n(“a=”+a);
n(“b=”+b);
n(“c=”+c);
n(“d=”+d);
} }
答:输出如下
a=17 b=9 c=17 d=9
2.以下哪段代码能正确编译通过?
(a)
char a = „a‟;
char b = 1;
char c = 08;
(b)
int a = „a‟;
(c)
long a =‟u00ff‟;
(d)
char a = „u0ff‟;
(e)
char d = “d”;
答:(b)、(c)能通过编译。(a)中“char c=08”将int赋值给char需要部分强制转换,“char c=8”就正确;(d)中unicode编码错误,java采用的是ucs-2编码,共16位;(e)字符赋值是使用单引号,字符串string赋值时才使用双引号。
3.下面哪些代码能编译通过?
(a)
short myshort=99s;
(b)
string name = „excellent tutorial mr green‟;(c)
char c = 17c;
(d)
int z = 015;
答:(d)可以编译通过。(a)中char赋值给short需要强制转换;(b)中string类型赋值用双引号;(c)中int赋值给char需要部分强制转换。
4.字符“a”的unicode字符编码为65.下面哪些代码正确定义了一个代表字符“a”的变量?
(a)
char ch=65;
(b)
char ch=‟65‟;
(c)
char ch =‟u0041‟;
(d)
char ch=‟a‟;
(e)
char ch =”a”
答:(c)、(d)可以得到”a”。(b)的输出为5,其他无法编译通过。
5.以下代码共创建了几个对象?
string s1=new string(“hello”);
string s2=new string(“hello”);
string s3=s1;
string s4=s2;
答:共创建了2个对象。栈区4个局部变量分别引用了堆区的2个实例,而2个实例又引用了工作区的同一个类。
6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
class test {
static int myarg = 1;
public static void main(string[] args)
{
int myarg;
n(myarg);
} }
答:无法编译通过,因为局部变量myarg声明之后java虚拟机就不会自动给它初始化为默认值,若在使用前未被初始化,编译会报错。
7.对于以下程序,运行“java mystery mighty mouse”,将得到什么打印结果?
public class mystery
{
public static void main(string[] args)
{
changer c = new changer();
(args);
n(args[0]+“ ”+args[1]);
}
static class changer
{
void method(string[] s)
{
string temp = s[0];
s[0] = s[1];
s[1] = temp;
}
} }
答:打印结果为“mighty mystery”
8.对于以下程序,运行“java pass”,将得到什么打印结果?
public class pass
{
static int j = 20;
public static void main(string[] args)
{
int i=10;
pass p = new pass();
d(i);
n(“i=”+i);
n(“j=”+j);
}
public void amethod(int x)
{
x*=2;
j*=2;
} }
答:打印结果是
i=10 j=40
其中“int x”是传参,作用域仅在amethod之中。
第四章 操作符
1.以下哪些程序代码能够编译通过?
(a)
int i=0;if(i){
n(“hello”);}
(b)
boolean b1=true;
boolean b2=true;
if(b1==b2){
n(“so true”);}
(c)
int i=1;
int j=2;
if(i==1||j==i){
n(“ok”);}
(d)
int i=1;
int j=2;
if(i==1&|j==i){
n(“ok”);}
答:(b)、(c)能编译通过。(a)中int不能作为boolean出现,(d)中不能出现&|该操作符。
2.运行以下程序,将得到什么打印结果?
n(-1>>>1);
n(-1>>1);
n(2>>1);
n(1<<<1);
答:>>>是逻辑右移位操作符,也称不带符号右移位操作符,在移位的过程中二进制数开头填0;>>是右移位操作符,也称带符号右移位操作符,舍弃末尾,在开头填符号位;<<<操作符不存在;
11111111 11111111 11111111 11111111
-1>>>1
01111111 11111111 11111111 11111111
11111111 11111111 11111111 11111111
-1>>1
11111111 11111111 11111111 11111111
00000000 00000000 00000000 00000010
2>>1
00000000 00000000 00000000 00000001
2147483647-1 1
3.以下temp变量最终取值是什么?
long temp =(int)3.9;
temp %= 2;
答:取值为1。
4.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
if(5 & 7 > 0 && 5 | 2)n(“true”);
答:int型不能作为boolean型出现。
5.以下代码能否编译通过?假如编译通过,运行时将得到什么打印结果?
int output=10;
boolean b1 = false;
if((b1==true)&&((output+=10)==20)){
n(“we are equal”+output);} else {
n(“not equal!”+output);}
答:not equal!10
6.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
int output=10;
boolean b1 = false;
if((b1==true)&((output+=10)==20)){
n(“we are equal”+output);} else {
n(“not equal!”+output);}
答:not equal!20
7.对于以下声明:
string s1=new string(“hello”);
string s2=new string(“there”);
string s3=new string();
下面哪些是合法的操作?
(a)
s3=s1+s2;
(b)
s3=s1-s2;
(c)
s3=s1&s2
(d)
s3=s1&&s2
答:(a)是合法操作。除了“+”能用于字符串的连接以外,其他操作符(如“-”、“&”、“&&”等)都不支持string类型的操作元。
第五章
流程控制
1.运行以下代码,将得到什么打印结果?
int i = 3;
int j = 0;
double k = 3.2;
if(i < k)
if(i == j)
n(i);
else
n(j);
else
n(k);
答:0
2.以下代码能否编译通过?假如能编译通过,运行时将得到什么打印结果?
int i = 4;
switch(i){
default:
n(“default”);
case 0:
n(“zero”);
break;
case 1:
n(“one”);
case 2:
n(“two”);}
答:可以编译通过,打印结果是:
default
zero
分析:default可以放在任何位置上,一旦符合一个case即从头执行到尾,不再判断case。
3.以下哪些是合法的
(a)
int i;for(i=5, int j=10;i<10;j--){}
(b)
int i,j;for(i=0, j=10;i<10, j>0;i++, j--){}