201871010126 王亚涛 《面向对象程序设计(java)》 第一周学习总结
项目 |
内容 |
这个作业属于哪个课程 |
https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 |
|
作业学习目标 |
|
随笔博文正文内容包括:
第一部分:课程学习平台注册账号(20分,每项4分)
平台名称 |
注册账号或者个人博客园地址 |
博客园:www.cnblogs.com |
|
程序设计评测:https://pintia.cn/ |
1778183526@qq.com |
中国大学MOOC: https://www.icourse163.org/ |
15352021749 |
以下回答是或否 |
|
是否加入课程班级博客群 |
是 |
是否加入课程QQ讨论群 |
是 |
第二部分:理论知识学习部分
第一章 Java程序设计概述
一:Java"白皮书“的关键术语
1.简单性
人们希望构建一个无须深奥的专业训练就可以进行编程的系统,并且要符合当今的标准惯例。因此,尽管人们发现C++不太适合,但在设计java的时候还是尽可能地接近C++,以便系统更易于理解。Java挑剔了C++中许多很少使用、难以理解、易混淆的特性。在目前看来,这些新特性带来的麻烦远远多于其带来的好处
的确,Java语言是C++语法的一个纯净版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等。然而设计者并没有试图清除C++中所有不适当的特性。例如,switch语句在Java中就没有改变。如果你了解C++你就会发现可以轻而易举地转换到Java语法。以前,Java刚发布时,许多开发人员肯定觉得Java并不简单。很多年以后Java的开发环境才迎头而上。如今,Java发开环境已经远远超过了大多数其他编程语言的开发环境。简单的另一方面是小。能够在小型机器上独立运行的软件。随着时代的发展,现在已经适用于嵌入式设备。
2.面向对象性
简单来说,面向对象设计是一种程序设计技术。它的重点在于对象。举一个例子:有一个木匠想做一把椅子,一个有面向对象特点的木匠,他始终关注的是所制造的椅子,然后再关注所使用的工具;一个不具有面向对象特点的木匠,他首先考虑的是所用的工具。在本质上,Java的面向对象能力和C++是一样的。主要不同点在于,C++可以多重继承,在Java中取而代之的是更简单的接口概念。总的来说,就是Java先考虑的是结果,再考虑怎么实现它。
3.分布式
Java有一个丰富的例程库,到这里是不是想问例程库 是什么? 有什么用? 它是用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能通过URL打开和访问网络上的对象,它的编写程度就相当于我们访问本地一样。
4.健壮性
Java的设计目标之一就在于Java编写的程序可以具有多方面的可靠性。Java编译器能够检测许多在其他语言中仅在运行时才能检测出来的问题。至于第二点,对于以前需要花费几个小时才能检查出指针bug而引起的内存冲突的人来说,一定会爱上Java的这一特性。简单来说,健壮性是指出错了也能继续运行的能力。
5.安全性
Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。使用Java可以构建防病毒、防篡改的系统。从一开始,Java就设计成能够防范各种攻击,其中包括:* 运行时堆栈溢出时。如蠕虫和病毒常用的攻击手段。*破坏自己的进程空间之外的内存。*未经授权读写文件。 不过黑客已经擅长找出全体系结构实现中的小漏洞,Java安全模型没有原先预想的那么成功,不过我相信迟早有一天,它会出现奇迹的。
6.体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以迅速地翻译成本地机器的代码。字节码可以实现了结构中立。
7.可移植性
因为Java有一个JVM(Java Virtual Machine)Java虚拟机,源程序*.java被编译成字节码文件,字节码是与平台无关的,是面向jvm编写的,而Jvm又有自己的一套指令系统,在不同的平台上jvm的指令也是不一样的,也就是说不同操作平台有自己的Jvm但是Jvm向上的字节码接口是与平台无关的,Jvm接口向下是与硬件有关的,jvm是个中间件,这样只要有字节码和Jvm,不管在任何平台都可以运行Java程序。全靠的是Jvm虚拟机,可以跨平台,这就是可移植性。
8.解释型
Java解释器可以在任何移植解释器的机器上执行Java字节码。由于链接是一个轻量级的过程,所以,开发过程也变得更加敏捷,更加具有探索性。它其实就是把做好的源程序翻译一句,然后执行一句,直至结束。特点:执行速度慢、效率低;依靠解释器、跨平台性好。javascript语言也是解释型的。
9.高性能
尽管现在我们对解释后的字节码的性能已经比较满意了,但在有些场合还需要更高的性能,这时候我们该怎么办呢?字节码可以在运行时刻 动态地 翻译成对应这个应用的特定CPU的机器码。
10.多线程
多线程可以带来更好的交互响应和实时行为。如今,我们非常关注并发性,现在我们不再追求更快的处理器,而是获得更多的处理器,而且要让它们一直保持工作。并发程序设计绝非易事,不过Java在这方面表现很出色,可以很好地管理这个工作;web编程因为时间不是很长,处理器则要花很长时间来等待服务器响应,需要并发程序设计来确保用户界面不会被冻住。
11.动态性
从各种角度看,Java与C或C++相比更加具有动态性。因为它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而客户端却没有任何影响。在Java中找出运行时类型信息十分简单。
当需要将某些代码添加到正在运行的程序中时,动态性将是一个非常重要的特性。比如说:从网上下载代码,然后在浏览器上运行。如果使用C或C++,这确实难度很大,不过Java可以很容易实现程序的推演。(C#与Java有很多相同之处,不过使用的虚拟机却是完全不同的)。
二:Java applet
1:Applet基础
在网页中嵌入Applet程序:
<applet codebase= "."
code= "com.webtec.graph.TopGraphApplet.class"
archive="topview20111202.jar"
width=800 height=600>
<param name=width value="800">
<param name=height value="600">
</applet>
Codebase: applet程序位置(.表示页面和applet在同一位置)
Code: applet类的全名
Archive:引入的jar包,多个用","隔开
<param name=width value="800">指定向applet传入的参数
Applet程序:
getParameter("width"), 从Apple获取参数对应值,未设置返回null
getCodeBase (),返回当前applet的路径,即applet的目录的URL。
这里犯了个错误,想要从properties文件中读取服务器配置,在applet中配置连接服务器的路径,但是applet是服务器端下载的,不能访问客户端的文件系统,不可能读到properties文件,最后用getCodeBase()方法替代了。要配置用户属性,可以在param标签配置。
Validate(),在applet中动态添加组件,不显示,调用了一下Validate()方法,然后图形出来了,repaint()、doLayout()都不得行。
2. Applet与服务器交互
准备在applet程序中绘制图形,图形数据从数据库中获取出来的,开发的时候直接访问了数据库,还用了JPA,在Eclipse里面发现运行起来很正常,很强大,发布的时候发现又做错了。
Applet是运行在客户端的,需要客户端的java类库支持,开发的时候直接把很多包放到了类路径下,发现用户要从网页运行不可能下载所有的jar包支持运行,所以不要把applet功能做得太过强大,主要是用来展示的。
Applet可以直接访问数据库,但是需要JDBC的支持,但是最好不要这样做。一方面客户端是没有jdbc包的,直接放到applet一起会增加用户访问时的网络负担;另一方面,数据库服务器不一定能够从客户端直接连通,主要是网络问题,可能数据库位于内外或者其他安全考虑。
最终不得不考虑从远程Http服务器获取图形数据,代码如下:
/**
* 从服务器读取数据绘制TOP图的数据
* */
public static String getGraphicData() {
String graphicData = "";
//服务器servlet或Action请求路径(绝对路径)
String urlString = Common.ActionAddress.getGraphDataUrl();
byte buffer[] = new byte[4096];
StringBuffer data = new StringBuffer();
HttpURLConnection conn = null;
try {
URL url = new URL(urlString);
conn = (HttpURLConnection) url.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
int len = 0;
while((len = is.read(buffer))>0){
data.append(new String(buffer, 0, len));
}
is.close();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null,
"Error: " + "Error occurs when request to : \n" +
urlString + "\nReason: " + e.getLocalizedMessage(),
"Applet Message", JOptionPane.ERROR_MESSAGE);
}
return graphicData;
}
在开发环境中测试一切正常,但是发布到网页中无法执行。上面的代码表面上看只有IOException,所以一开始只捕获了IO异常,开发环境中运行正常,但是网页加载后执行正常,Java控制台无任何异常信息,调了很久不知道为什么。后来只好将IOException改成Exception,捕获到了java.net.SocketPermission,提示Access Denied,发现是applet无法使用网络资源,是java security机制的原因,applet无法访问客户端的网络、文件等资源,所以只好在客户端修改配置了,配置方法在下一节。
网络异常解决了,程序还是无法执行,检查到java.lang.reflect.ReflectPermission异常,可能是在给Filed设置值是设置了私有成员,最终没有解决,网上查不到资料,自己改不来,只好吧那部分代码换了,用了点低级的代码先把功能实现了再说。
还有一个问题不能解决的是Applet的字符编码问题,服务器端用的是UTF-8的编码格式,在页面测试正常,开发环境中的Applet测试正常,但是发布到网页测试不正常,说是Applet运行的时候用的是操作系统的默认字符集,最后只好把它从GBK转了一遍,勉强凑合,但是没有完全去除乱码,GBK2312和GBK18030直接抛异常,没搞懂为什么,期待高手指点。
3. Applet安全设置
Applet访问网络,抛出异常:
java.security.AccessControlException: access denied (java.net.SocketPermission server1 resolve)
这个错误的通知你访问被拒绝。这就是说,由于 applet 程序试图在没有获得正确的权限的情况下访问系统资源,括号中代码表示,若要纠正这种情况,您需要一个向数据库所在计算机(主机名为server1) 授予 applet 访问权限的 SocketPermission。
解决办法:
创建policy策略文件,内容如下:
grant {
permission java.net.SocketPermission "server1", "resolve";
permission java.net.SocketPermission "127.0.0.1:8080", "connect, resolve";
};
将该文件保存成ASCII文件,命名为netconnect.policy,存于${JRE_HOME}/lib/security/目录下(主要是为方便后面路径填写)。
修改Java安全配置:
创建了策略文件后,修改${JRE_HOME}/lib/security/java.security文件,在
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
下添加一行
policy.url.3= file: ${java.home}/lib/security/netconnect.policy
再次访问页面的applet,又捕获到如下异常:
java.security.AccessControlException: access denied(java.net.SocketPermission 127.0.0.1:8080 connect,resolve)
网络访问仍受限,不能访问服务器127.0.0.1:8080,在前面生成的策略文件中加入
permission java.net.SocketPermission "10.6.1.16:1521", "connect, resolve";
再次访问,运行成功。
三:关于Java的常见误解
1:Java是HTML的扩展。
Java是一种程序设计语言;HTML是一种描述网页结构的方式。除了用于在网页上放置Javaapplet的HTML扩展之外,两者没有任何共同之处。既然说到了HTML就不得不提一下JSP了,JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,他是一个动态网页设计。我们可以把JSP理解为是Java Servlet的扩展;
2使用XML,就不需要Java。
Java是一种程序设计语言;XML是一种描述数据的方式,可以使用任何一种程序设计语言处理XML数据,而Java API对XML处理提供了很好的支持。此外,许多重要的第三方XML工具采用Java编写。
3Java是一种非常容易学习的程序设计语言。
像Java这种功能强大的语言大都不太容易学习。首先,必须将编写玩具式程序,或者模仿他人的增删改与实际项目是的艰难区分开来。Java类库包含了数千种类和接口与几万个方法,要解决Java的实际问题,我们还是要了解不少内容的;
4.Java将成为使用与所有平台的通用性编程语言。
从理论上讲,这是完全有可能的。的确,除了微软之外的每一个厂商都希望如此。然而,有很多在桌面计算机上已经完全工作良好的应用程序,在其他设备上或浏览器中或许不能正常地工作。同时,在编写这些应用程序时,利用了相应处理器的速度和本地的用户接口库,而且他们已经移植到所有重要的平台上。这类应用程序包括:字处理程序,图片编辑器以及Web浏览器。他们通常是用C编写的,采用Java语言重新编写似乎对最终的用户不会带来什么特别的好处。
5Java只不过是另外一种程序设计语言。
Java是一种很好的程序设计语言,很多程序设计人员喜欢Java胜过C,有上百种好的程序语言没有广泛的流行,而带有明显缺陷的语言,而Java和C却大行其道。这是因为程序设计语言的的成功更多的取决于其支撑系统的能力,而不是优美的语法。人们主要关注:是否提供了易于实现某些功能的易用,
便捷和标准的库。是否拥有强大的程序设计能力与调试工具,语言和工具是否能够与计算器的其他基础结构整合在一起Java的成功源于其类库能够让人们轻松的完成原本有一定难度的事情。
6.Java是解释型语言,因此对于关键的应用程序速度太慢了。
早起的Java是解释型的,现在除了像手机这样的微型平台之外。Java虚拟机使用了即时编译器,因此采用Java编写的热点代码其运行速度与c++相差无几。
现在今天的计算机速度远比人们发出抱怨的时候快了很多。一个较慢的Java程序与几年前相当快的C++程序还要快一些。现在的人们已经不抱怨Java程序慢了,而去抱怨Java的界面太丑了。
7.JavaScript是Java的简易版。
JavaScript是一种在网页中使用的脚本语言。它是由Netscape发明的,原来的名字叫做LiveScript.JavaScript的语法类似于Java,除此之外。两者无任何关系。当然名字有些想象。
第二章 Java程序设计环境及实验内容说明
主要学习了Java程序开发过程。和如何分析Java应用程序。
1:源程序的编辑:Java源程序是以•Java为后缀的文本文件,可以用各种Java集成 开发环境中的源代码编辑器来编写,也可以用文本编辑工具来编写。
2:源文件的命名:如果源文件中有多个类,那么只能有一个类是public类。 如果有一个类是public类,那么源文件的名字必须与这个类的名字完全相同 。源程序文件的扩展名是.java 。如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名是.java就可以。 源程序名一定为MyJavaApplication.java
第三部分:实验部分
1、实验名称:实验一 Java程序设计环境
2. 实验目的:
(1)掌握JDK的安装与配置;
(2)掌握使用JDK开发Java程序的基本命令及步骤;
(3)熟练运用Elipse集成开发环境开发java程序的基本步骤
(4)掌握Java程序的基本语法。
3. 实验步骤与内容:
实验1 JDK的安装与配置
1):下载jdk10.0.2文件并进行安装,安装路径不会改变。
安装后的文件夹截图如下
2):进行环境变量的设置
步骤:此电脑-计算机-属性-高级系统设置-环境变量-path-新建文件夹-将如图所示的变量名粘贴
3):window+R
4):输入java
5):输入javac
6):下载安装eclipse软件包,页面如下
7):安装后设置工作空间后,截图如下
8):创建Java文件,截图如下
9):利用eclipse输出九九乘法表
10):代码如下:
package cfb.java;
public class welcome {
public static void main(String[] args) {
int sum;
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
sum=i*j;
System.out.print(j+"*"+i+"="+sum+" ");
}
System.out.println();
}
}
}
4:实验总结如下:
1):通过本次课程的学习让我们对Java程序设计这们课程有了初步的了解;学习了Java的发展史及Java程序设计环境等知识。
2):学会了如何去安装JDK及Elipse,在安装的过程中,出现了许多问题,如环境变量的调试等,通过问助教及同学都一一解决了;掌握了一些基础的实验知识。
3):最后通过自己安装的JDK及Elipse运行了welcome.java及九九乘法表的命令,掌握了运行的步骤及过程。
4):通过这次的实验使我学到了不少实用的知识,并且锻炼了自己的动手能力;相信在以后的学习中,在助教和老师带领下,我可以学到更多的关于编程的相关知识。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package project3; public class test { public static void main(String[] args) { int sum; for ( int i= 1 ;i<= 9 ;i++) { for ( int j= 1 ;j<=i;j++) { sum=i*j; System.out.print(j+ "*" +i+ "=" +sum+ " " ); } System.out.println(); } } } |