java程序员面试技巧(共10篇)
要点:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供了以下功能:在运行时判定任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判定任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
问题:Java为什么要引入异常处理机制
要点:
程序执行时经常会出现除零溢出、数组越界等运行错误,影响程序的正常执行。错误及异常是不可避免的,一个好的应用程序,在满足用户要求的各种功能的同时,还应具备能预见程序执行过程中可能产生的各种异常的能力,并能为异常情况给予恰当处理。在Java语言中,这种技术就是异常处理 Java语言通过面向对象的异常处理机制来解决运行期间的错误,可以预防错误的程序代码或系统错误所造成的不可预期的结果发生。减少编程人员的工作,增加了程序的灵活性,增加程序的可读性和健壮性.问题:什么是JAVA多线程机制
一.什么是多线程?
多线程是指同时存在几个执行体,按照不同的执行线索共同工作的情况。
二.什么是程序,进程和线程?
程序是一段静态的代码,是应用软件执行的蓝本。
进程是程序的一次动态执行过程,它对应了从代码加载,执行至执行完毕的一个完整的过程。这个过程也是进程本身从生产,发展至消亡的过程。
线程是比进程更小的执行单位。
区别:一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索即每个线程也有其从生产,发展到消亡的过程。
三.线程的生命周期
线程的生命周期可分为四个阶段,新建,运行,中断和死亡。
新建:当一个Thread类或者其子类的对象被声明并创建时,新生成的线程就处于新建装他,有了相应的内存空间和其他资源。
运行:线程被创建之后,就有了运行的条件了,一旦轮到它来享用CPU资源时,便可以摆脱创建它的主进程开始了自己的生命周期。
中断:一个正在执行的线程可能被认为的中断,让出CPU使用权,进入阻塞状态。线程阻塞时,不能进入排队队列,只有当引起阻塞的原因被撤销时,线程才可转入就绪状态,重新进入排队队列中,等待CPU资源,以便从中止处开始运行。
死亡:线程死亡有2种情况,一是正常运行,完成了它全部的工作。另一种是线程被提前强制终止。死亡状态下的线程,释放了被分配的内存。
四.线程的优先级
在java系统中,线程调度依据优先级基础上的“先到先服务”原则。
Thread类的setPriority(int a)方法可设置线程的优先级,取值有Thread.MIN_PRIORITY,Thread.MAX_PRIORITY, Thread.NORM_PRIORITY三种,默认级别为Thread.NORM_PRIORITY.五.如何实现多线程
Java编程中实现多线程有两种方式:一是继承Thread类,用其子类创建线程,二是实现Runnable接口
六.线程同步
当两个或者多个线程同时访问一个变量,并且一个线程需要改变某个变量时,需要对修改数据的方法修饰为synchronized.当一个线程在使用同步方法时需要用到某个变量,而此变量又需要其他线程修改后才能符合本线程需要,此时用wait(),让本线程等待。
其他线程如果在使用同步方法时不需要等待,那么当它使用完该方法后,用notifyAll()方法通知所有由于使用该同步方法而处于等待的线程结束等待,(notify()方法只能通知第一个处于等待的线程结束等待)
七.Interrupt()方法
一个线程在run方法执行完后便会自动消灭,如果想在run方法执完毕前就消灭线程,可以使用interrupt()方法,此时该线程会捕获InterruptedException异常,在处理该异常的语句里告诉线程立刻结束run方法的执行。
问题:java多线程使用cup是什么机制
要点:java获得cup使用权根据优先级,高优先的先执行,这个和操作系统是一样的,但是优先级别的控制是通过虚拟机控制的,然后在执行的时候是通过操作系统时间片的机制,多线程java有自己的调度算法,虚拟机会自动调度执行的线程,而操作系统处理的是cpu的执行,其实两者都有调度算法,xp的机制我想和
1、main方法是怎么写的public static void main(String [] args){}
2、变量的命名规则是怎么样的?
采用驼峰命名法,见名知意,以小写字母开始。
常量命名:全部大写。
方法命名: 小写字母开始,驼峰命名。
类命名:首字母大写。
3、if„else„和写两个if 有什么区别
if„else„只执行其中一条,写两个if,两个都要执行
4、在JAVA中直接写浮点常数,默认是什么类型?
默认是double类型
5、什么是标识符?它的命名规则是什么?
凡是可以命名的地方都叫标识符。
标识符有两种:
1、系统标识符(关键字);
2、用户标识符
以字母、数字、下划线、$复活组成,不能以数字开头
6、什么是变量?
变量是命了名的内存空间,并且空间的值是可以改变的。
7、JDK与JRE分别是什么?
JDK叫java开发工具集,包括编译环境、运行环境、调试环境以及基础类库。
JRE叫java运行环境,包括虚拟机、核心类库、以及健接文件。
8、try-catch-finally三个基本块的作用?catch里的代码是干什么的?
try块表示此处代码可能引发异常
catch块捕获try块的异常
finally块通常用于资源的回收,连接关闭,清理工作等
try-catch-finally不能单独存在,try块后必须跟catch或finally
catch或finally前必须跟try块
9、继承类和实现接口分别怎么做?
继承用extends关键字继承
定义接口用interface关键字
实现接口用implements10、如何去获得字符串的长度?
调用String类的length()方法
11、Java的基本数据类型有哪些?
int 4字节 整型
byte 1字节 整型
char 2字节 整型
short 4字节 整型
long 8字节 整型
double 8字节 浮点
float 4字节 浮点
boolean 布尔
12、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
值传递,Java里没有引用传递
13、列出至少5个最常见到的runtime exception并描述在什么情况下出现
IOException在未找到文件时会抛出
NullPointerExecption在对象引用指向空时会抛出
ArrayIndexOutOfBoundsExecption在数组下标越界时会抛出
NumberFormatException在字符串不能转换成数字时会抛出
ArithmeticException在分母为零时会抛出
14、ArrayList和Vector的区别
vector是线程安全的,所以效率低,Arraylist是线程不安全的,但是效率高。
15、在IO中字节流和字符流的父类是什么?
字节流父类是InputStrean和OutputStream
字符流父类是Reader和Writer16、什么是包?定义包有什么好处?
文件夹。
好处:
1、可以有效的组织相关类;
2、可以做到信息的隐藏。
17、怎么样知道磁盘一个目录中有哪些文件?
1、File对象.list()方法;
2、File对象.listFile()方法。
18、如何获得一定范围的随机整数?
x+Math.random()*y 其中x是位移数,确定最小范围,y是放大系数,确定最大数。
(x-y)*Math.randon()+y19、如何获得java当前的工作目录
使用System.getProperty(“user.dir”)能够获得当前工作目录的字符串地址。
20、怎么样判断一个异常类是checked异常还是unchecked异常?
判断当前异常类,是否是RuntimeException的子类,如果是,则是运行期异常否则是编译期异常。
21、log4j一共有几个级别?分别是哪些?级别的高低有什么样的区别.log4j有五个级别:
DEBUG:调试
INFO:信息
WARN:警告
ERROR:错误
FATAL:崩溃
21、静态变量和成员变量应该怎么访问?
静态变量可以通过对象.和类名.的方式访问
成员变量通过对象.的方式访问
22、如何将一个字符串转成一个基本数据类型
Int x = Integer.parselint(“32”);
Double d = Double.parseDouble(“4.5”);
23、如何让JFrame的初始位置居中(在不同的分辨率中)
窗体对象.setLocationRelativeTo(null);
24、谈谈集合的作用
方便对数据进行 存储,检索,操作,传输。
25、类的修饰符能不能是private、static、protected?
内部类可以,因为内部类相当于外部类的属性
26、Try块中是否所有的语句都一定会执行,为什么?
不是,一但try中发生了异常,那么异常发生处下面的语句就不会执行,专区catch块执行
27、什么时候用继承,什么时候用接口?
当需要重用属性和方法时使用继承
当只需要重用方法时用接口
28、finally是不是什么时候都会执行?
是当虚拟机关闭,System.exit(0),finally内容不会执行;
29、什么是主线程?
当main()方法执行时会产生主线程,1最先开始 2最后结束
3产生其他子线程
4回收资源
30、进行IO流操作时,如果操作的文件不存在会发生什么情况?
读取流在文件不存在时,会抛出文件未找到异常
写入流在文件不存在时,会创建文件,但如果该文件所在目录不存在,同时会抛出文件未找到异常
31、IO流操作的步骤是怎么样的?
创建流 操作流 关闭流
32、finally的作用是什么?
无论是否有异常都会执行的代码块,一般用于资源回收,比如流动关闭、数据库的关闭
34、当一个线程进入一个对象的一个同步方法后,能否进入其它非同步方法? 么?一般在什么时候使用? 可以,但不能进入其他同步方法。
33、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?
Finally{}在程序开启时只执行它本身里的代码。
会执行,在方法返回前执行
35、如何启动线程,它直接调用run()方法有什么区别?
启动线程调用start方法,用start方法启动线程后,是多个线程同时进行,使用run()是普通方法,是不会产生新的线程,是单线程。
36、数组有没有length()这个方法? String有没有length()这个方法?
数组有length属性,String有length方法
37、GC是什么? 为什么要有GC?
GC叫做垃圾回收器,为了回收内存不再使用对象,释放内存空间,避免内存溢出。
38、线程同步化会带什么样的结果?
1:可以使数据安全
2:效率会降低
39、什么是线程安全?
当两个或两个以上线程,访问同一个资源时,为了保证数据的安全,只允许同一时间
只能有一个线程访问该资源。
40、服务器类有一个while循环,能否直接while(true)?
可以,但这样缺乏灵活性,没有办法控制循环结束,最好使用boolean变量来控制
循环的运行和结束。
41、java帮助文档是如何生成的?
Javadoc.exe42、什么时候类名和文件名必须一致?
当类的定义为Public时,类名必须与文件名保存一致
43、如何将实现包装类和基本数据类型转化?
包装转基本1:包装类对象.xxxvalue(值);2直接赋值
基本转包装1: Integer = new Integer(90);2直接赋值
44、类InputStream中方法read()的返回值是什么?读出的是什么?
Read()返回的是int,读取的数据
read(byte[])返回int 当前读取的字节数
45、如果一个类实现一个接口,可不可以不实现接口里定义的所有方法?
可以,但这个类只能是抽象类
46、构造方法和方法有什么区别?构造方法能不能被重载,能不能被重写?
构造方法和雷鸣相同,构造方法没有返回类型,在对象创建时,被调用。
构造方法可以重载,不能重写。
47、请列举switch()括号中能接受的所有数据类型。
Char byte short int48、GUI的布局管理器常见的有哪几种?
绝对布局
边界布局管理器
卡片布局管理器
流布局管理器
网格布局管理器
49、断言有什么作用?
断言是一个布尔表达式,当表达式为真继续执行,表达式为假,则抛出一个断言错误,主要用于测试。
50、String和StringBuffer的区别?
String具有长度不可变的特性,当String做添加、删除修改时,会产生一个新对象
StringBuffer是String类的一个改进版,是缓冲区的一个对象,当对该对象进行字符的添加、修改时,不会产生新对象。
51、接口里方法修符是什么?
Public abstract52、接口里可以定义变量吗?
不行,就可中的变量修饰符是public static final 只能定义常量
53、说几个String常用的方法
String.length()split()substring()equals()indexOf()lastundexOf()
54、在Dos界面下如何编译并执行Java程序?
Javac 文件名
Java 类名
55、创建一个线程有几种方法?
集成 thread 类
实现Runnable接口
56、项目开发的流程是怎么样的?
市场调研,需求分析,概要设计,详细设计,编码,测试,维护。
57、java语言的特点是什么?
简单,面向对象,分布式,健壮,可移植,解释性,安全,多线程,垃圾回收
58、main方法中有个参数String[] args。这个参数的值是由谁传递给它的。执行java类时,由控制台传入
59、java中采用什么字符编码集?char类型能不能放入一个中文字? Unicode 该字符集一个字符有2个字节。,char是两个字节可以放一个中文,因为中文是两个字节
60、byte的取值范围
-128~+127(-2的7次方to2的7次方-1)
61、GET方式和POST方式提交时,流有什么不同?
GET和POST是HTTP协议请求服务器的两种方式
GET方式页面参数,是附加在URL后面。/login?userName=XXX
Java语言似乎专门为网络设计的,用其开发网络软件特别便利,在Internet时代,Java热遍及全球,学习和使用Java的人越来越多。在Java中进行网络编程是相对容易的,因为J2SE中的java.net包已经对各种通信协议很好地进行了封装。文中用Java来实现基于UDP的聊天程序,限于篇幅,只实现了基本的聊天功能。
首先,要介绍Java中封装UDP编程的类———DatagramSocket,这是用来发送和接收数据报的套接字。在程序启动后,可以在构造函数中提供端口参数用以在本地主机上绑定一个端口,以便接收和发送数据报。DatagramSocket类的send方法可以将参数对象的数据报发送到目的主机的目的端口;receive方法可以接收网络上其他主机发送过来的数据报并封装成对象。
其次,要介绍的就是承载数据报的对象DatagramPacket,这个对象封装了UDP的数据报数据,通过重载构造函数,提供不同的参数,可以把DatagramPacket构造成发送数据或接收数据的数据报对象。发送数据的对象将作为DatagramSocket类的send方法的参数;接收数据的对象将作为DatagramSocket类的receive方法的参数。
以上两个类,其实就基本可以实现UDP方式的网络聊天功能了,但是为了数据报能够正确发送,还得借助InetAddress类。InetAddress类表示互联网协议(IP)地址,通过调用静态方法getByName并提供字符串形式的IP地址参数就可以得到对应的IP地址对象,把它传给DatagramPacket,再用UDP套接字的send方法就可以向IP地址对应的主机发送数据了。
为了方便用户的使用,把程序分成两个类,主类为Chat,里面有主函数main,以便应用程序的运行;另一个类FrameMain,扩展了窗体类,方便用户输入及显示消息。主函数main中实例化了主窗体FrameMain。
接下来来看具体代码,为描述程序的方便,分块地来研究,先看代码片断1:
以上对象都是程序中要使用的主要对象,除了本地监听端口设了9000的值,其他对象都是空对象。recvPacket对象将在套接字调用完receive方法后实例化,而sendPacket对象和IP对象将在触发发送数据报的代码时创建。UDPSocket对象是核心,将在一个单独的初始化方法jbInit(JBuilder开发工具默认生成的方法)中对这个对象进行创建,并且在窗体构造函数中调用jbInit方法。请看以下jbInit方法的代码片断2:
以上代码在实例化UDPSocket对象时以9000的端口号作为监听端口。UDP套接字通过调用receive方法监听数据报并实例化recvPacket,但是由于该方法在接收到数据报前一直阻塞,所以为了与主界面功能互不影响,将这个会阻塞的方法放到一个单独的线程中,这样,主界面的发送和显示功能与接收数据报的功能可以认为是同时在进行,互不干扰。请看以下代码片断3:
以上代码中,run函数定义在主界面类FrameMain中,它实现了Runnable接口,然后在jbInit函数中创建了一个子线程recvThread,将主界面的实例传给子线程,意味着子线程在运行过程中要工作的代码写在主界面的run函数中,并且调用start方法启动子线程(参见代码片断2)。UDPSocket对象的receive方法返回后,recvPacket中就有了数据报的内容,通过调用getData方法获取字节数组,并组合成字符串显示。那么,recvPacket中的数据是谁发来的呢?答案就是网络中的其他主机,发送数据报的过程是,先得到用户的输入数据,然后得到用户输入的目标主机和端口,最后组合成数据报对象sendPacket,调用UDP套接字的send方法发送。请看以下代码片断4:
以上代码中,jtfSend是用户输入聊天信息的文本框,jtaReceive是显示接收信息的多行文本框。sendMessage函数可以由输入框(jtfSend对象)或发送按钮的Action事件调用,信息朝目标主机同端口(9000号端口,sendPacket构造函数的第四个参数)发送后,同时也显示在本机聊天窗体的信息框中。为了测试程序,我们用两台局域网内的主机做实验,A主机IP地址为172.16.10.166,B主机IP地址为172.16.10.222。分别在两台主机中运行聊天程序,并相互输入聊天信息,可见程序运行结果如图1所示。
由此可见,用Java语言实现简单的UDP聊天程序是相当容易的,核心的收发数据报功能只要借助DatagramSocket和DatagramPacket两个类就可以完成,如果再把其他功能完善一下,就可以编写出更有实际用途的网络聊天程序。
摘要:UDP是OSI参考模型中一种无连接的传输层协议,它提供了简单不可靠的信息传送服务。由于UDP比较简单,UDP头包含很少的字节,所以它在速度方面有很大优势。很多常用的即时通软件,如QQ程序,都会使用UDP实现很多基本功能。Java语言是当今流行的网络编程语言,它的API封装了UDP编程的类,用来实现UDP聊天程序很容易。
关键词:UDP,Java,聊天程序
参考文献
[1]UDP.用户数据报协议.http://www.networkdictionary.cn/pro-tocols/udp.php.
[2]方建文.Java UDP编程及应用.电脑学习,2005,1.
关键词: Java; 面向对象; 程序设计课程; 教学方法
中图分类号:G642 文献标志码:A 文章编号:1006-8228(2013)01-37-03
Pondering over teaching of “java programming designing”
Lan Wenfei, Li Zimao
(School of Computer Science, South-central University of Nationalities, Wuhan, Hubei 430074, China)
Abstract: Java is becoming one of the most popular object-oriented programming languages in developing areas based on Internet and one of the core programming curriculums for universities. In this paper, some Java teaching problems are discussed, such as the choice of teaching materials, the choice of developing environment, filtering of teaching content, using of teaching method, design of the teaching cases. The feasible ideas for above are given.
Key words: Java; object-oriented; programming curriculum; teaching method
0 引言
在Java面世短短的十来年间,Java以其简单易学、安全可靠、面向对象、多线程及平台独立性等许多特点[1-3],被越来越多地推广和使用,它已成为Internet上最受欢迎的开发语言之一。
目前,许多高校已将“Java程序设计”列为程序设计的核心课程之一,肯定了它在培养计算机开发类人才中的地位和作用。
本人已连续多年担任高校计算机专业Java程序设计课程的主讲教师,针对Java教学中存在的问题,积累了一些教学经验,希望能与同仁共同探讨。
本文就Java语言的教学,包括教学时数的安排、教材的选择、开发环境的选取、教学内容的筛选、教学方法的运用、教学实例的选用等方面[4,5],给出了一些自己的做法,实践证明,这些方法是可行的。
1 教学准备环节
首先讨论Java程序设计课程教学的准备工作。
1.1 合理安排教学时数
我们授课的对象是软件工程实验班本科学生,该课程安排在大一第二学期,鉴于学生在大一第一学期已具备基本的计算机原理及专业基础知识,这样来安排教学计划是比较合理的。考虑到学生在大一已具备C/C++高级语言程序设计的基础,而多数学生在国内修完本科课程后会选择到国外继续深造学习,所以Java语言程序设计课程的教学设计必须考虑全方位,此外Java语言衍生自C++,它的基本语法同C语言,而其面向对象的基本特征同C++。鉴于此,我们将Java程序设计课程的上课时数设置为48个授课学时,18个实践学时,这样设置是比较合适的。
1.2 精选教材
选择合适的教材,是保证有效教学的重要手段之一[6]。合适的Java教材, 应具有较好的知识覆盖面,难度适中,适合学生的具体情况[4]。由于我们讲授的对象是实验班学生,需要使用全英文教学,此外,他们已具备一定的面向对象程序设计基础,所以诸如《Thinking in Java》、《Objects First with Java》、 《The Java Programming Language》等经典书籍都适合作为该课程的教材。
选择国外经典教材,能保证我们的教学内容与国外接轨[7]。学生在阅读英文原版教材的同时,可同时参考对应的中文翻译本,能使学生加强对所学知识的理解。
1.3 选择合适的实验环境
由于JDK(Java Development Kit)是命令行的编程环境,需要用编辑器建立Java源程序。如果选用Windows自带的记事本notepad来编辑程序,首先程序中若出现语法错误是很不容易被发现的;其次每次必须打开cmd窗口并输入一大堆命令,如编译命令、运行命令等;再就是对于applet小程序还要自编html文件,非常麻烦。但是,如果选用超智能、傻瓜型的集成开发环境,如JBuilder、NetBeans,因其耗内存,所以速度慢,慢到不能忍受;更重要的是不利于入门级的学生掌握Java的基本语法。因为Java上机实践的一个重要训练内容就是熟练使用Java编译器(java.exe)去检查语法错误,并能修改错误,这样做的目的是使学生能较快地掌握Java语法。
本文简要介绍一种既简单又方便入门者使用的Java编辑器TextPad。TextPad作为Java编辑器需要做简单配置,首先把TextPad装上(先装JDK),安装完毕就可按下面的方法配置:在菜单的Configure中选择Preference,选择Tools,点add下拉菜单,选择Java SDK commands。之后Tools中多了3项:Compile Java、Run Java Application、Run Java Applet。从这一点来看它确实比其他的Java编辑器更容易配置,如EditPlus。
按上述方法配置TextPad Java编辑器后,还可适当优化TextPad Java IDE环境,使它更适合编写、执行Java程序。优化环境方法在此省略,有兴趣的作者可参见文献[2]。
2 教学内容
根据多年的Java程序设计课程教学经验,我们认为讲授该课程的内容主要包括三个方面:一是Java语言基础;二是Java语言的新特性;三是在讲授上述内容时穿插介绍JDK类库的常用类。
Java语言基础包括:数据类型、表达式、基本语句、类和对象、继承和多态、异常处理机制、小程序、图形用户界面设计、输入/输出、多线程、网络编程和数据库编程。考虑到我们面授的学生已经掌握了C++面向对象程序设计基础内容,而且Java教学内容偏多、教学时数较少[8],因此对于衍生自C++的Java语言,它和C++类似的部分,包括数据类型和表达式、基本语句、类和对象、继承和多态及异常处理机制等,应讲授较少的学时数;而对于Java语言特有的部分,如小程序、图形用户界面设计、输入/输出、多线程、网络编程和数据库编程,则应讲授较多的学时数。由于篇幅有限,在此省去对每个章节学时数的具体编排。
1996年Sun公司发布了JDK1.0,在短短的十年时间里,JDK从1.0版本升级到6.0版本。特别值得一提的是2004年发布的JDK5.0版本,它在旧版本的基础上增加了一些非常有意义的新特性,比如,泛型编程、增强的for循环、自动装包/拆包、类型安全的枚举、可变参数和静态导入等,使用这些特性有助于我们编写更加清晰、精悍、安全的Java代码。为了与时俱进,让学生掌握较新的Java特性,我们认为很有必要在课堂上向学生传授新技术,以拓宽学生的知识面。
一方面为了节约有限的学时数,另一方面为了鼓励学生在课余积极使用、查阅JDK帮助文档,我们不安排专门的章节介绍JDK类库的使用,而是在讲授Java程序例子时,将重点介绍一些重要类的使用,比如,在讲授图形用户界面这一章时,则会讲授一些重要包的使用,包括java.awt、java.awt.event、java.applet、javax.swing等,概述这些包的类层次结构。这样做既节约了时间,也使学生通过对例子的学习较好地掌握了一些常用类的使用。特别需要说明的是,容器类很重要,这些类在程序设计中会普遍使用到。
总之,在教学内容的选择上,我们推崇简化的原则,忽略一些不常用的知识点,如带标号的跳转语句、复杂的表达式运算规则、嵌套类等,这样做既节约了课时,也能充分引导学生编写简单、可读性好的程序代码[4]。
3 教学方法
充分利用多媒体教学设施,为上课讲述的例子做编译、运行演示。对于学生编程时常常出现的错误,在编辑程序时可设置类似的错误障碍,让学生修改错误,以杜决今后再出现此类错误,此外还能现场教会学生如何使用JDK TextPad开发环境。到了学期的中后期,鉴于学生们已基本掌握Java的语法,上课可适当减少演示例子的次数。
对于Java基本类库的授课,根据多年的Java开发经历和教学实践,我们认为学生应该对基本类库有个整体了解,要重点掌握 Java类库中的Java.lang和Java.util两个包,特别是容器类的应用是难点,需要结合实际例子阐述。这两个包提供的是Java编程要用到的基本类,学生需要清楚这些类或接口的继承关系、主要功能[5]。我们在授课时适当介绍JDK API文档的使用和阅读,提倡使用最新版本的英文API文档;在教学中注意总结相关类的联系和区别,如String和StringBuffer在使用上的区别,以及FileInputStream和RandomAccessFile在用于读文件时的区别。
在实施Java教学时,应注意Java和C++的区别。Java和C++都是面向对象的语言,而且Java衍生自C++,在基本语法及面向对象特征方面均有很多相同之处。比如,我们在讲授Java的数据类型、常量、变量、表达式、语句、类和对象、继承和多态等内容时,应着重指出它和C++的区别,简略细节知识。这样既能节约课时,也能使学生快速掌握Java的基本语法和面向对象特征。
在学生掌握了Java的基本语法及面向对象特征的基础上,我们会考虑将重点放在图形用户界面、多线程、网络编程和数据库编程上,以使学生能进行一般的Java应用编程。
如果课堂教学时数比较宽裕,则可介绍Java和UML、Java和设计模式相关的知识,强调软件开发新技术,特别是对于软件工程专业的学生,更应该这么做。
4 教学实例
可将程序例子分为非算法型和算法型两种类型。在介绍Java基本语法时,我们提倡用非算法型的例程,利于学生对例子程序的阅读和理解。而在讲授计算机典型问题,如排序、查找、递归时,则使用算法型的例程,以加强学生对一些典型问题的掌握。
在选择例程时,以例程中是否含有JDK类作为筛选原则,目的在于能让学生掌握更多的JDK类。
此外,在期中阶段,可选择一两个游戏项目作为综合的例程,如用于Java学习的Robocode游戏实验项目。Robocode是IBM的一位工程师MatNelson用Java语言所创造的机器战斗仿真引擎,是一款专门为程序员设计的游戏半成品。利用该引擎,只要编写几行简单的代码,就可以创造出一个在屏幕上四处疾驰的机器人坦克,参加游戏对战[4]。这样能增强例子的实用性和趣味性,调动学生学习Java的积极性。在此基础上,再布置一个游戏项目,作为学生在课余时间的练兵题。
5 结束语
衍生于C++的Java语言,作为一种面世较晚的语言,它集中体现和充分利用了若干当代软件技术新成果,如面向对象、多线程、平台无关等[9],使其拥有众多优秀的特性,从而成为面向对象软件开发的首选语言。
出于“Java程序设计”这门课的重要性和教学中存在的问题,本文提出了“Java程序设计”教学实施的诸多方面,并在作者施教的班级进行了多次实践,实践表明,上述教学思路是可行的,能在一定程度上提高教学效果。
下一步我们将在“Java程序设计”实践教学和后续课程改革方面进行实践探讨。
作者多年从事Java教学和Java软件开发工作,积累了一些教学经验,本文将它提练总结,希望能给Java同仁一些启示。
参考文献:
[1] 秦学礼,汪迎,郑淑红.Java程序设计实用教程[M].清华大学出版社,2012.
[2] 刘正林等.Java技术基础(第2版)[M].华中科技大学出版社,2004:30-40
[3] 印旻.Java语言与面向对象程序设计(第二版)[M].清华大学出版社,2007.
[4] 叶恒舟.Java程序设计教学探讨[J].科技信息,2007.1:23-25
[5] 李纯玉,胡丽娜.Java语言程序设计教学中的几点思考[J].科技信息,2007.2:10-13
[6] 张延军,乔德军,温炎耿等.构建Java教学体系[J].邯郸学院学报,2007.17(9):41-44
[7] 蓝雯飞,郑波尽.高级语言程序设计课程建设思路[J].计算机教育,2012.6:30-32
[8] 陆萍.浅议Java程序设计教学改革[J].电脑知识与技术,2007.27:32-35
1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面:1)抽象2)继承3)封装4)多态性
2、作用域public,private,protected,以及不写时的区别 答:区别如下:
作用域 当前类 同包 子类 其他 public √ √√ √ protected√√√ × default √√× × private √×××
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。
3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4;或者写成float f =3.4F。
5、int 和Integer 有什么区别? 答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入不是对象的基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的封装类就是Integer,从JDK 1.5开始引入了自动封箱/解封箱机制,使得二者可以相互转换。
Java 为每个原始类型提供了封装类:
原始类型: boolean,char,byte,short,int,long,float,double 封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
6、数组有没有length()方法?String 有没有length()方法?
答:数组没有length()方法,有length 的属性。String 有length()方法。
7、在Java 中,如何跳出当前的多重嵌套循环?
答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。
8、是否可以继承String 类? 答:String 类是final类,不可以被继承。
9、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对象的引用是永远不会改变的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值
10、抽象类(abstract class)和接口(interface)有什么异同? 答:
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。
一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。
抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
11、静态变量和实例变量的区别?
答:静态变量也称为类变量,属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝;实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。
12、String s=new String(“xyz”);创建了几个字符串对象?
答:两个对象,一个是静态存储区的“xyx”,一个是用new创建在堆上的对象
13、接口是否可继承(extends)接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承具体类,但前提是具体类必须有明确的构造函数
14、Java 中的final关键字有哪些用法?
答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)
15、Error 和Exception 有什么区别? 答:Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
选择题
1、在Java
Applet程序用户自定义的Applet子类中,一般需要重载父类的(D)方法来完成一些画图操作。
A.start()
B.stop()
C.init()D.paint()
2、Java语言具有许多优点和特点,下列选项中,哪个反映了Java程序并行机制的特点?(B)
A)安全性
B)多线程
C)跨平台
D)可移植
3、下列哪个类声明是正确的?(D)
A)abstract final class HI{···} B)abstract private move(){···}C)protected private number;
D)public abstract class Car{···
4、在Java语言中,下列哪些语句关于内存回收的说明是正确的?(B)
A.程序员必须创建一个线程来释放内存;
B.内存回收程序负责释放无用内存
C.内存回收程序允许程序员直接释放内存
D.内存回收程序可以在指定的时间释放内存对象
5、字符串是Java已定义的类型,关于它的构造函数,下面说法不正确的是: B
A.String(char[] value, int offset, int count)
B.String(int[] codePoints,int offset,int count)
C.String(String original)
D.String(StringBuffer buffer)
6、下列说法中正确的是: C
A.导入包会影响程序的性能 B.包存储在类库中
C.包是类的容器D.上述说法都不对
7、哪个关键字可以对对象加互斥锁? B
A.transient
B.synchronized
C.serialize
D.static8、下列叙述中,错误的是: D
A、父类不能替代子类
B、子类能够替代父类
C、子类继承父类
D、父类包含子类
9、下列关于Java多线程并发控制机制的叙述中,错误的是:BC
A、Java中对共享数据操作的并发控制是采用加锁技术
B、线程之间的交互,提倡采用suspend()/resume()方法
C、共享数据的访问权限都必须定义为private
D、Java中没有提供检测与避免死锁的专门机制,但应用程序员可以采用某些策略防止死锁的发生
10、下列哪一个方法不是applet程序的组成部分:D
A、init()
B、start()
C、stop()
D、new()
11、下列Applet类的方法中,在Applet的整个生命周期里至多只执行一次的是:A
A、init()
B、start()C、stop()
D、paint()
12、启动一个线程所调用的方法是:C
A、run()
B、init()
C、start()
D、new()
13、编译Java
Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为(B)。
A..java
B..class
C..html
D..exe
二、填空题(每空格1分,共20分)
1、开发与运行Java程序需要经过的三个主要步骤为编辑源程序、编译生成字节码和解释运行字节码。
2、如果一个Java
Applet源程序文件只定义有一个类,该类的类名MyApplet,则类MyApplet必须是Applet类的子类并且存储该源程序文件的文件名为MyApplet。
3、若x=5,y=10,则x
4、抽象(abstract)方法方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。最终(final)方法方法是不能被当前类的子类重新定义的方法。
以下要介绍的是一份JAVA程序员面试经验
1.数据结构,主要涉及java.util包中的一些集合类。
2.OO。按照他的一段描述建模。主要是类的.继承关系以及接口实现。还有构造函数和析构函数在继承体系中的作用等等。
3.Java和C++在内存管理的不同之处。
4.JAVA的多线程机制。
5.反射机制的作用,以及在哪些方面使用了反射机制。
6.网络:TCP/IP协议,
HTTP访问机制。还问到了SSL之类。
7.DesignPatten:用过几种DesignPattern,J2EE中有哪些Pattern已经自动实现等等
8.数据库:比较EJB中的QL语言和SQL。还写了一段QL查询语句。
9.CMP中Home接口,Remote接口是如何实现的。
10.软件工程:常见的开发模型。平常项目管理中软件工程的运用。
final 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally 再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize?方法名。Java 技术允许使用 finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。Nested Class(一般是C++的说法),Inner Class(一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
第六,Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。Collection是个java.util下的接口,它是各种集合结构的父接口。
第七,什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的: assert(a > 0);// throws an AssertionError if a <= 0 断言可以有两种形式: assert Expression1;assert Expression1 : Expression2;Expression1 应该总是产生一个布尔值。Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记: javac-source 1.4 Test.java 要在运行时启用断言,可使用-enableassertions 或者-ea 标记。
要在运行时选择禁用断言,可使用-da 或者-disableassertions 标记。
要系统类中启用断言,可使用-esa 或者-dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
第八,GC是什么? 为什么要有GC?(基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc()Runtime.getRuntime().gc()
第九,String s = new String(“xyz”);创建了几个String Object? 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不能
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
一、Java教学中存在的问题
在Java程序设计这门课程的教学中,通过多次与学生的交流、沟通,以及与同事之间的相互交流中,笔者发现该门课程在实际教学中主要存在以下几个方面的问题:
1.教材的选用不合适
当今市面上《Java程序设计》教程数不胜数,如何从琳琅满面的书中选一本合适的教材成为教师们首当其冲的问题。有些教程逻辑混乱,只讲究知识的全面性,简单的罗列知识点,而忽略其重点和知识的连惯性;有些教程实例陈旧,过于简单,不利于学生对知识的理解和把握。
2.教学对象分析的忽略
传统的备课只备教材,很少从学生本身去备课,不了解学生的现状,不知所需,学生则不能很好接受和消化知识,也容易遗忘知识。教师的备课是上好一堂课的前提,除了备教材以外还需备学生和学法。有了对学生的了解才能有的放矢。
3.教学内容的定位、目标不明确
Java程序设计内容颇多,对内容的筛选和把握不够。传统的教学只讲究知识的全面和系统,而忽视其实际应用。如程序设计语言中的运算符优先级的讲解,传统的教学花大量的时间来分析讲解,写一上一长串不加括号的运算符让学生写出其结果,这样学生感觉既枯燥又乏味。另外,传统的教学目标只重视学生对理论知识的掌握而轻视学生实际动手能力和创新精神。
4.教学重点偏颇
Java安排在C语言程序设计之后,虽然学生有一定的程序基础,但很多学生受面向过程设计思想的影响。在进行类设计的时候并没有体现面向对象的设计思想,不能深刻题解Java的核心思想。另外,Java的内容繁多,对重点和实用性的把握不够。
5.教学方法有待改进
传统的教学方法是单讲语法知识,而学生的注意力都被引导在具体的语法细节上,却忽略了在实际项目中的应用,结果导致学生会语法,不会编程用,使学生感觉学习这门课既“苦”又“枯”。程序设计本身就比较枯燥,对于理解能力和自控力相对较弱的学生更是吃不消。
6.实践环节较为薄弱和逻辑思维训练不够
Java程序设计是一门理论性和实践性非常强的课程,理论的理解需要实践的检验,实践反作用于理论,从而对概念和理论有进一步的理解。传统的教学对逻辑思维训练不够。
二、提高Java的教学途径
1.基本概念与恰当比喻相结合
Java程序设计的概念和基本原理比较多,如何让学生快速理解而又不容易遗忘,笔者在教学实践中采用概念与恰当的比喻相结合。比如在讲解如何来处理异常这一节时,举了一个大家都非常熟悉的例子——狼来了。小孩在放羊的过程中狼来了,这就是放养的过程中出现了异常,那么通常有两种做法:一是小孩迅速喊叫让大人们来处理,这就是将异常抛给别人来处理,即throws;另一种是自己处理,即try-catch-finally。
2.实践教学的改革思想
传统的教学模式概念语法知识讲的多,而实践的机会少,而且知识点和实践往往有脱节的现象,讲完知识点后学生不一定会用。笔者在教学实践中也是采用案例教学法[1],但这些例子是学生日常生活中最熟悉的例子,将所要讲解的知识点融入到项目实践中。比如在讲解数组这一节时,以一个计算学生成绩的小项目来展开,学生对计算成绩这事再也熟悉不过了,那么如何自己编写程序来计算呢?首先分析这一问题当中的关键词——成绩,成绩都是一些数值,而且可以说是同一类型的数据,在计算机内部如何来存放,由此引出数组的概念;对学生成绩通常需要计算机出总分、平均分和满足一定条件的成绩时,由此引出对数组的一些常用算法。
3.教学理念的改革
《国家中长期教育改革与发展规划纲要》中指出扩大应用型、技术型人才培养规模,为高校的培养目标指明了方向。因此在教学中应为目标做准备,体现应用型和技术型的特点,让学生真正学以致用、快速应用和适应技术的发展。在教学中应体现学习方法的传授,培养学生的自主学习能力和可持续学习的精神。另外,让学生在学生阶段多参与项目开发,提前进入全面应用阶段。
4.学生逻辑思维的训练
逻辑思维能力是计算机编程过程的一个至关重要的因素,任何程序都涉及到算法,如何开发快速有效和傻瓜式操作的应用软件,是程序员生命力的重要体现。在教学过程中帮助学生建立起这种思维,同时积累一定量的代码量。那么在实践教学中就应多分析算法、比较算法、改进算法和应用算法,逐步增强学生的逻辑思维能力。
5.完善评价机制
评价机制大多采用笔试和课程设计或答辩的形式[2],但在做课程设计时(如图书馆管理系统),大多也是要求学生提交纸质稿,不太方便检测学生的代码运行情况。笔者在实践中利用了学校的服务器,让学生连接服务器中的数据库,这样便于检测学生的代码运行状况。
结束语
当今社会发展日新月异,计算机技术更是如此,这就促使我们不断刷新教学方法和教学手段,促使学生理论水平和实践能力都有一个提高。
参考文献
[1]张洲平,安晓钢.Java程序设计的教学研究.中国科技创新导刊,2014(4):41-43.
关键词:数据包;TCP协议;UDP协议
中图分类号:TP311 文献标识码:A 文章编号:1674-7712 (2012) 10-0098-01
计算机网络是计算机技术和通信技术紧密结合的产物,对如今社会发展有着深远的影响。网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要问题:一个是如何准确地定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效地进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。
一、TCP和UDP协议
TCP和UDP协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS、SNMP、DNS、TFTP等。
二、网络通信中Java的网络类和接口
Java中有关网络方面的功能都定义在java.net程序包中。Java所提供的网络功能可大致分为三大类:
(一)URL和URLConnection:使用Socket类进行网络编程相当麻烦。对已经存在的协议,程序员应当了解它的每一段代表的含义,改而使用URL类可以很大程度上免去这些麻烦。
1.URL类
URL是类URL表示统一资源定位器,即指向网上某处资源的指针。一个URL包括协议名和主机名,有些还包括特定的端口号。
2.URLConnection类
通过URL的方法openStream(),只能从网络上读取数据,如果同时还想输出数据,例如向服务器的CGI程序发送一些数据,则必须先与URL建立连接,然后才能对其进行读写,这时就要用到URLConnection类了。CGI是公共网关接口的简称,它是用户浏览器和服务器端的应用程序进行连接的接口。
URLConnection类可以由两种方式构建:一种是通过一个URL实例openConnection()方法返回一个,另一种是直接通过new URLConnection(URL ul)来创建。URLConnection实例不仅可以实现接收消息,还可以发送消息。
(二)Socket:又称套接字,是网络编程中最原始的通信方式之一。一个套接字通常包含一个IP地址和一个端口地址,后者一般对应着某个应用程序。因此如果要进行Socket编程,首先要确定端口。一般来说,1024以下的端口已经被指定为固定的服务类型,如果用户要开发自己的交流平台,必须使用之后的端口地址。
套接字(Socket)允许程序把网络连接当成一个流,可以向这个流写字节,也可以从这个流读取字节。Java的Socket类提供了丰富的功能。服务器使用的一般是ServerSocket,通过连接使双方都会产生一个实例,对实例进行操作来实现通信。大部分工作都是在抽象类SocketImpl中定义的。
任何一个网络程序都离不开连接的建立、读写操作、关闭,程序还分为客户和服务器两种类型。除了关闭操作可以简单地使用Close()方法外,读写操作都不是一句话说得完的。
(三)Datagram:是一种面向无连接的通信方法。它基于UDP协议,不需要建立和释放连接,每次通信时只要构造一个DatagramPacket实例发送出去,对方同样构造一个DatagramPacket实例接收。以Datagram方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。
三、Java实现加密
Java的网络功能十分强大,还体现在作用它可以轻松实现各种加密算法。如今加密算法大致可分为两类:对称加密和公钥加密。
对称加密,发送方和接收方使用同样的密钥,前者用它来加密,后者则用它解密。这样做本来是很安全的,例如3DES的密钥为112位,这样的组合数大约是5×1033,几乎不可能被攻破。但是密钥总要在双方交换,因此交换途径的保密性就很关键,使用人工固然安全却麻烦,在网络上传输虽方便但危险。故如今网络上大多使用公钥加密方式。
公钥加密的优点在于,加密和解密的密钥是不同的,前者称为公钥,后者称为私钥。公钥,顾名思义,是可以公开的,一台电脑里可能存放了很多远程通讯方提供的公钥。
公钥解密还可以用在数字签名上,这时的动作是相反的:用私钥加密,和用公钥解密。Java里用于实现这方面功能的是java.security软件包。
综上所述,Java网络编程主要基于TCP协议和UDP协议,TCP协议提供高可靠性服务,适用于一次要传输交换大量报文的情况,信道上传递的包不需要源地址和目的地址,UDP协议提供高效率服务,适用于依次传输交换少量报文的情形,每个数据包含目的的地址和端口号,Java支持网络通信的类在java.net包中。
参考文献:
[1]印旻.Java语言与面向对象程序设计[M].北京:清华大学出版社,2007
[2]朱福喜.Java语言程序设计[M].北京:清华大学出版社,2007
[3]李明才.Java语言程序设计案例教程[M].北京:中国水利水电出版社,2010,8
[4]张渝.Java语言程序设计[M].北京:北京大学出版社,2008
所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。
类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。
属性与方法?
不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。
什么是封装?
只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。
编写 java文件的注意事项?
在记事本中编写java文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的java 文件名为Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。
如何编译java程序?
单击开始|运行命令,在命令行上输入cmd,按回车键(在 window98中输入command,按回车键),即可打开一个命令窗口,将目录转换到编写java源程序所在的目录,输入javac filename.java
如何执行java程序?
同样在命令窗口中输入java filename,基本数据类型?
面试例题1:击鼠标比赛现在开始!参赛者有拉尔夫、威利和保罗。
拉尔夫10秒钟能击10下鼠标,威利20秒钟能击20下鼠标,保罗5秒钟能击5下鼠标。以上各人所用的时间是这样计算的:从第一击开始,到最后一击结束。
他们是否打平手?如果不是,谁最先击完40下鼠标?
解析:n秒钟击n下鼠标其实是击第一下鼠标时才开始计时的,实际上击n-1下需要n秒钟,那么若击40下鼠标,拉尔夫需要(40-1)/(9/10)=39/0.9秒,威利需要
(40-1)/(19/20)=39/0.95秒,保罗需要(40-1)/(4/5)=39/0.8秒,因此威利先击完。
答案:威利先击完。
面试例题2:100美元哪里去了?
3个朋友住进了一家宾馆。结账时,账单总计3 000美元。3个朋友每人分摊1 000美元,并把这3 000美元如数交给了服务员,委托他代到总台交账。但在交账时,正逢宾馆实施价格优惠,总台退还给服务员500美元,实收2 500美元。服务员从这500美元退款中扣下了200美元,只退还3个客人300美元。3个客人平分了这300美元,每人取回了100美元。这样,3个客人每人实际支付900美元,共支付2 700美元,加上服务员扣的200美元,共计2 900美元,那么这100美元的差额到哪里去了?
答案:这道题纯粹是文字游戏,但是如果你的头脑不够清晰,很可能把你搞糊涂了。客人实际支付2 700美元,就等于总台实际结收的2 500美元加上服务员克扣的200美元。在这2 700美元上加上200美元是毫无道理的,而在这2 700美元上加退回的300美元,这是有道理的,因为这等于客人原先交给服务员的3 000美元。
面试例题3:有一种小虫,每隔2秒钟分裂一次。分裂后的2只新的小虫经过2秒钟后又会分裂。如果最初某瓶中只有一只小虫,那么2秒后变2只,再过2秒后就变4只……2分钟后,正好满满一瓶小虫。假设这个瓶内最初放入2只这样的小虫。
问:经过多少时间后,正巧也是满满的一瓶?
答案:经过1分58秒时间,也正巧是满满一瓶。因为从一只虫蜕变为2只虫只需2秒钟。在瓶内只有一只虫子的情况下,经过2秒钟后就变成2只。这时的情况和瓶内一开始就有2只虫子的情况是一样的。出现这两种情况的时间差是2秒钟。所以,经过1分58秒后,也正好是满满一瓶。
面试例题4:斯芬克斯是古代希腊神话中的带翅膀的狮子女魔。传说她在底比斯附近要人猜谜,猜不出来就要杀人。一次,她要底比斯王子猜谜:“有一种动物,早上4条腿,中午2条腿,晚上3条腿,是什么动物?”聪明的王子说:“是人。”他猜中了。
如果你是现代的斯芬克斯,会提出什么样的问题呢?比如,1和0之间加上什么符号才可以使得到的数比0大又比1小呢?你知道吗?
答案:0.1面试例题5:父亲打电话给女儿,要她替自己买一些生活用品,同时告诉她,钱放在书桌上的一个信封里。女儿找到信封,看见上面写着98,以为信封内有98元,就把钱拿出来,数也没数放进书包里。在商店里,她买了90元的东西,付款时才发现,她不仅没有剩下8元,反而差了4元。回到家里,她把这事告诉了父亲,怀疑父亲把钱点错了。父亲笑着说,他并没有数错,错在女儿身上。
问:女儿错在什么地方?
答案:拿倒了,86看成是98了。
面试例题6:3个孩子翻衣兜,他们把兜里所有的钱都掏出来,看看一共有多少钱。结果一共有320日元。其中有两枚硬币是100日元的,两枚是50日元的,两枚是10日元的。每一个孩子所带的硬币中没有相同的。而且,没带100日元硬币的孩子也没带10日元的硬币,没带50日元硬币的孩子也没带100日元的硬币。你能弄清楚这3个日本孩子原来各自带了什么硬币吗?
答案:第一个小孩:100,50,10;第二个小孩:100,50;第三个小孩:10。
java 面试试题
1,谈谈final, finally, finalize的区别。
答案:final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
2,Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以
implements(实现)interface(接口)?
答案:可以继承其他类或完成其他接口,在swing编程中常用此方式。
3,Static Nested Class 和 Inner Class的不同,说得越多越好。
答案:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
4,&和&&的区别。
答案:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).5,HashMap和Hashtable的区别。
答案:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.6,Collection 和 Collections的区别。
答案:Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
7,什么时候用assert。
答案:1.4新增关键字(语法),用于测试boolean表达式状态,可用于调试程序。
使用方法 assert
另外的使用方式assert < boolean表达式>:
注意编译时要增加-source 1.4 参数,否则报错。]运行时要增加-ea参数,否则assert行被忽略
8,GC是什么? 为什么要有GC?
答案:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
9,String s = new String(“xyz”);创建了几个String Object?
两个
10,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 答案:Math.round(11.5)==12
Math.round(-11.5)==-11
【java程序员面试技巧】推荐阅读:
java程序员面试问题10-15
java程序员面试题(笔试&面试题)10-07
java经典程序面试题04-17
java开发程序员01-08
Java程序员和C++程序员的区别03-02
java程序员实习过程09-23
JAVA程序员简历模版10-30
java程序员就业感言11-11
Java程序员供需分析01-21
java程序员笔试题03-31