科学网

 找回密码
  注册

tag 标签: java

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

我是如何读通别人的VC程序的,兼论教学
热度 1 dulizhi95 2010-12-19 09:31
我是如何读通别人的 VC 程序的,兼论教学 前文说过: 别人写的 VC 程序,十万条语句以上,我不要任何文档及注释行,任何介绍,硬读源代码,就能将软件结构,数据结构,数据库,算法思路,全部读通并推出来,而且时间很快,然后大动干戈,想怎么改就怎么改。以前曾经走过不少地方,不客气地说,尚难发现有人具有这样的功力。那么,这是如何做到的呢? 首先,数据结构、编程思路方面的功力必须强大,此功力不强,无论如何是无法读通别人大而复杂的程序的。再者,数据库、系统结构及其构思运用能力必须强大,否则不可能从系统的角度把握整个软件。 然后,对 VC 本身的结构及其思维逻辑必须掌握透彻。对此我不可能在此详谈,仅举一小例子。曾经遇到一位刚工作的研究生问我:在 VC 中如何做双文档。我当时忍不住笑了:竟有双文档这一概念 ? 其实都是由初学过来的,我当然明白他的意思,他是指如何在 VC 程序已有的 doc-view 对的基础上,再构造另一个具有同样效力、但功能方式完全不同的 doc-view 对。我当时告诉他:你将已有的 doc 类和 view 类各复制一份,改改名字,再将 initinstance 函数中相关 doc-view 对的代码复制一份,改改名字,你就可建立另一个 doc-view 对了。在这个对里,你想怎么设计数据结构及其储存,怎么在 view 里 show 出来,都行。 在具体读程序时,又有不同对待。 前面某博文说过,我自己做面向对象时,往往按面向过程来做:所有成员都是 public ,所有类都在同一平面上(系统构造的除外),而且一个大的函数往往近万条语句,这是典型的面向过程方式。但我能保证自己做的东东最后能运行流畅、性能优良,这才是最重要的!我发现国内的公司开发的软件普遍是面向过程方式,而老美所写的 VC 程序则结构层次严谨,从面向对象的角度非常精炼。所以我在读别人的 VC 程序时,对老美写的,主要从结构入手,搞清各个类的层次关系及其横向关联关系。而对国人所写的 VC ,集中精力读通一两个最大的类,对每个类,又是集中精力读通一两个最大的函数,这样整个程序也就差不多了。 这里我要特别强调,计算机软件专业的学生一个最重要的技能是:读懂别人和模仿别人! 例如,我教 JAVA 课时,我的理念是:学生大一开始学 C 语言,由于什么基础都没有,当然应从最简单的概念语法句型学起,而学 JAVA 的学生往往是大二大三了,此时已掌握了程序的思维方式,具备了一定的编程构思能力,具有了数据结构、数据库、系统构造方面的知识技能,此时再从基本句型学起就大大不高明了。而且, JAVA 作为一个大的开发平台,其拥有的类和函数的数目大得惊人,课堂上不可能一一讲解。所谓授人以鱼不如授人以渔,我的方法是:教学生如何读懂别人的程序,通过别人程序的总体功能及上下文来推敲理解 JAVA 类及其函数的功能及正确用法。即从大到小,由整体理解推敲出小的细节,而不是相反,这样不仅小的句型掌握了,而且别人的编程技巧也学会了,综合构思能力也得到了锻炼和提高。以此让学生先掌握 JAVA 最基本的类和函数,能力具备了,自己就可通过自学用此方法去掌握其他 JAVA 类和函数。
个人分类: 未分类|5549 次阅读|4 个评论
注意Java版本
rasin 2010-11-25 20:37
如果你在下载PDB数据库或者使用某个软件的时候遇到文件丢失,比如下载已提示成功完成,可是你就是找不到文件。或者你在某个软件(涉及到版权,就不举例了)中,明明在一个文件夹中可以看到这个软件生成的几个文件,而用浏览器却看不到这些文件(并非隐藏或系统文件)。你可以考虑升级你的Java了,兴许可以解决问题。 我的运行环境(windows7,windowsXP sp3) (jre 5.15)
个人分类: 科研随笔|2920 次阅读|0 个评论
[转载]matlab for java 的实例配置
billzhenxing 2010-11-10 21:34
(根据matlab的帮助文件一步步操作,截图(这里看不见)) from: http://blog.csdn.net/jizi3321/archive/2009/04/01/4041791.aspx 1. 检查 Java 环境 1) 打开运行窗口 2) 输入命令: java version ,查看 java 版本信息 3) 输入命令: javac version ,查看 javac 版本信息。如果在系统环境中, JDK 路径不是设置在系统变量 path 中,而是设置在用户变量 Java-home 中,应加上相应路径,输入命令为: %JAVA_HOME%\bin\javac version 。 4) 以上检查完成后,就可以进行操作,否则重新配置 java 环境。 2. 实例:发布一个矩阵实例,将 M-code 编写的功能转换成 java 可用的组件。 1) matlab 中所做工作 ( 1 )打开 MATLAB Builder JA 产品 启动 matlab ,在 matlab 的命令行窗口(以下所说命令,除非特指,均指在 matlab 的命令行窗口输入的命令)中输入命令: deploytool ,打开 java 发布工具。检查 matlab 是否正确指向 JDK 的工作路径,输入命令: getenv JAVA_HOME ,检查所指路径是否正确。 ( 2 )拷贝实例文件 拷贝 %matlab%\toolbox\javabuilder\Examples\MagicSquareExample 到 matlab 的工作空间,把文件名 MagicSquareExample 重命名为 magic_square 。 ( 3 )测试要发布的 M-file 文件 在 matlab 中导入在 D:\javabuilder_examples\magic_square\MagicDemoComp 下的 makesqr.m 文件。为了确保能找到对应的文件,在 matlab 中要设置对应的工作搜索路径,在 file/setpath 设置工作搜索路径 D:\javabuilder_examples\magic_square\MagicDemoComp ,点击 save 。 makesqr.m 文件内容如下: function y = makesqr(x) %MAKESQR Magic square of size x. % Y = MAKESQR(X) returns a magic square of size x. % This file is used as an example for the MATLAB % Builder for Java Language product. % Copyright 2001-2006 The MathWorks, Inc. y = magic(x); 测试 m 文件是否正常运行,输入命令: makesqr(5) ,运行结果。 ( 4 )创建 Java 组件 a. 创建新的发布项目。 点击发布工具箱的新建按钮。 在打开的窗口中,左边选择 MATLAB Builder JA ,右边选择 Java Package 。选择文件保存路径为 D:\MyProgram\workspace\matlab\magic_square ,输入文件名 magicsquare ,点击 ok 按钮。 b. 重命名类名 MATLAB Builder JA 产品根据所建的项目名称自动给创建的类赋名,象目前创建后的项目 magicsquare 下的类,名称应为: magicsquareclass ,重命名为 magic 。 c. 确认发布工具面板上的选项 Generate Verbose Output 已被选择。 d.magicsquare 项目中添加 m-file 文件。先选择当前目录至 makesqr.m 文件所在的路径,在右边文件显示窗口中拖动对应的文件至发布工具窗口,系统自动将该文件放至对应类中,点击保存按钮。 e. 构建项目,创建初始的 java 包。 在发布工具面板上点击构建项目按钮 ,系统开始构建项目,其操作结果,警告等信息会显示在 output 窗口上。构建后系统会在项目路径下生成两个文件夹: src 和 distrib , src 包含 java 源文件 magic.class,distrib 包含打包文件 magicsquare.jar 。构建路径及构建内容的选择可以在 Deployment Project Settings dialog box 设置。 (5) 选择打包文件 点击发布工具面板上的 settings 按钮,打开设置页面。在左边窗口选择 Packaging ,右边窗口按表格指示操作,最后点击 ok 按钮。 要打包的文件 操作 MCR Installer 选中 Include MCR. 选项 . Auto-generated Javadoc documentation 在 Additional Files 窗口选择项目的 \src\doc ,点击 Add 按钮,添加到右边栏上。 readme.txt 在 Additional Files 窗口选择项目的 \distrib 的 readme.txt ,点击 Add 按钮,添加到右边栏上。 ( 6 )运行打包程序。点击发布工具面板上的打包按钮,对项目进行打包。然后用压缩工具把 distrib 里的文件打包起来。 2) java 平台下所做工作 (1) 搜集所需的文件,包括: a.MCR Installer b.Javadoc documentation c.readme.txt file d.com.mathworks.toolbox.javabuilder (% matlab% \toolbox\javabuilder\jar\javabuilder.jar ) e. MATLAB Builder JA 创建的 magicsquare.jar (2) 在 java 开发平台测试组件 新建一个 java 项目 magic ,在 src 目录下新建一个 java 程序 Getmagic.java ,实例文件 \javabuilder_examples\magic_square\MagicDemoJavaApp 中已经提供源代码。 Getmagic.java 的源代码见附录 1 。 在 magic 项目中导入所需的两个 jar 包,一个是之前用 MATLAB Builder JA 创建的 magicsquare.jar, 一个是 javabuilder.jar , %matlab%\toolbox\javabuilder\jar\javabuilder.jar 。 (3) 配置 MyEclipse 的运行环境。选择 Getmagic.java 程序,右键选择 run- 》 open run dialog ,左边选择 Application/file ,右边需要配置的选项卡有 Main 、 Arguments 、 Enviroment 。 Main 选项卡:选择相应的程序,和 main 函数所在的类,点击 apply 按钮。 Arguments 选项卡:在 Program Arguments 中输入参数,如本例输入: 5 ,点击 apply 按钮。 Enviroment 选项卡:设置 matlab 的动态链接库的路径, %matlab%\bin\win32 。具体操作:选择 Enviroment 选项卡,点击 new 按钮,新建变量 path ,变量值为 D:\MyProgram\matlab\bin\win32 。点击 Apply 按钮应用。(此步骤可以在系统的环境变量中配置) 设置好参数后,点击 run 按钮,即可运行程序。 3) 用 mcrroot 替换 matlabroot 再次测试程序。执行好这一步后就可以直接使用 mcr 运行程序,即使没有安装 matlab 也可以使用。 (1) 安装 mcr 。运行之前 Matlab 的发布工具面板打包的可执行程序 magicsquare_pkg.exe ,解压出 4 个文件: _install.bat , magicsquare.jar , readme.txt , MCRInstaller.exe 。运行 MCRInstaller.exe ,安装至指定目录,假设为 D:\MyProgram\matlab\mrc\v78 。 安装过程中可能会出现以下错误,点击 ok 按钮继续安装即可。 (2) 打开 Enviroment 编辑 path 变量,选择之前的 path 变量,点击 Edit 按钮。把 path 的 Value 值改: D:\MyProgram\matlab\mrc\v78\runtime\win32 。 附件 1. /* getmagic.java * This file is used as an example for the MATLAB * Builder JA product. * Copyright 2001-2006 The MathWorks, Inc. */ /* Necessary package imports */ import com.mathworks.toolbox.javabuilder.*; import magicsquare.*; /* getmagic class computes a magic square of order N. The * positive integer N is passed on the command line. */ public class Getmagic { public static void main(String result = null ; /* Stores the result */ magic theMagic = null ; /* Stores magic class instance */ try { /* If no input, exit */ if (args. length == 0) { System. out .println( Error: must input a positive integer ); return ; } /* Convert and print input value*/ n = new MWNumericArray(Double. valueOf (args ),MWClassID. DOUBLE ); System. out .println( Magic square of order + n.toString()); /* Create new magic object */ theMagic = new magic(); /* Compute magic square and print result */ result = theMagic.makesqr(1, n); System. out .println(result ); } catch (Exception e) { System. out .println( Exception: + e.toString()); } finally { /* Free native resources */ MWArray. disposeArray (n); MWArray. disposeArray (result); if (theMagic != null ) theMagic.dispose(); } } }
个人分类: 编程积累|5718 次阅读|0 个评论
Java 面向对象的四个特征
buding09 2010-11-2 12:02
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来一般叫做类或者接口。)抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是数据抽象,二是过程抽象。 数据抽象就是用代码的形式表示现时世界中一类事物的特性,就是针对对象的属性。比如建立一个鸟这样的类,鸟都有以下属性:一对翅膀、两只脚、羽毛等。抽象出来的类都是鸟的属性,或者成员变量。 过程抽象就是用代码形式表示现实世界中事物的一系列行为,就是针对对象的行为特征。比如鸟会飞、会叫等。抽象出来的类一般都是鸟的方法。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。因此可以说,继承是为了重用父类代码,同时为实现多态性作准备。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。总的来说,方法的重写、重载与动态链接构成多态性。Java引入多态的概念原因之一就是弥补类的单继承带来的功能不足。(为规避C++中多继承造成的复杂继承问题,java采用单继承。) 动态链接对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态链接。 注意:继承与重载:一是子类与父类的关系,二是重载方法的调用问题。 子类对象可以直接当成父类对象使用,但反过来就不可以。举例来说,人是父类,学生是人的子类,所以学生对象一定具备人对象的属性,但是人对象就未必具有学生对象的特性。所以学生对象可以当做人对象来使用,但是人对象就不能当做学生对象使用。注意当把子类对象当成父类对象使用时,子类对象将失去所有的子类特性,只保留与父类同名的属性和方法(同名方法不仅是函数名相同,而且参数类型也要一样,否则不予保留)。此时可以对父类方法进行重写。 一个类中如果定义了重载的方法,则系统在调用方法时,会根据参数的类型自动选择调用合适的方法。
个人分类: 未分类|16117 次阅读|0 个评论
JTable
monicashu 2010-9-29 19:09
最近想做个小工具来做结果分析,就尝试下swing了。 这个里面信息和例子还是比较丰富的 EN:http://www.java2s.com/Tutorial/Java/0240__Swing/Catalog0240__Swing.htm CN:http://www.java2s.com/CN/Tutorial/Java/0240__Swing/Catalog0240__Swing.htm 有时候在google上折腾半天,暮然回首,这儿一小例清晰列出,无语。 不过Jtable上的例子还是不够,列的插入和删除找了些代码粘上用,还是有bug。 今儿下午认真debug了下,写了点笔记混在代码里如下。 /** *Atableusuallyhastwoview: *1.defaulttablemodel(rowmodel),specifiedbycoder,withtableheader(usefunctableModel.getColumnIdentifiers())androwdata(usefunctableModel.getDataVector(); *2.columnmodel(usefunc:getColunmModel),generatedbytableitself,maybeusingitforview. * *Theprovidedfunctable.removeColumn()onlyremovecolumnincolumnmodel,whichhidedthecolumnfromview. *Butthecolumn'sdataremainunchangedinrowmodel,alsothecolumn'snameandpositionintableheader. *So,toactuallydeletethecolumnfromtable,wenotonlyremovefromcolumnview,butalsoupdatethedefaulttablemodel. * *Therearealsoviewofsorter(sorter.getTableModel), */ @SuppressWarnings("unchecked") publicvoidremoveColumnAndData(JTabletable,MyDefaultTableModelclusterWholeText,intvColIndex){ TableColumncol=table.getColumnModel().getColumn(vColIndex); intcolumnModelIndex=col.getModelIndex();//columnmayhavedifferentindexinviewandtableheaderofmodel? Vector data=clusterWholeText.getDataVector();//defaultmodel'srowdata Vector colIds=clusterWholeText.getColumnIdentifiers();//defaultmodel'stableheader //Removethecolumnfromthetableview(columnmodel) table.removeColumn(col); //Removethecolumnheaderfromthetablemodel colIds.removeElementAt(columnModelIndex); //Removethecolumndata for(intr=0;r
个人分类: Experiments|14449 次阅读|0 个评论
Netbeans的GridBigLayout
xirongguo 2010-8-27 15:42
经过大量的实践和反复的总结得出以下几句顺口溜:上下对齐是从上不从下,左右对齐是从左不从右;内部填充基于最小值,能不用就不用;XY粗细很关键,额外空间全靠他;填充方向要控好,放大缩小才省心。
个人分类: 系统工程|3898 次阅读|0 个评论
Java布局
xirongguo 2010-8-8 18:23
Java可视化编程入门以来,一直被布局管理所困扰,在参考了NetBeans所生成的自动布局代码后,找到以下较为便捷的布局管理模式: 1.设置横向分布: javax.swing.GroupLayout CtrlLayout = new javax.swing.GroupLayout(control); control.setLayout(CtrlLayout); CtrlLayout.setHorizontalGroup( CtrlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(CtrlLayout.createSequentialGroup() .addContainerGap() .addGroup(CtrlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(CtrlLayout.createSequentialGroup() .addComponent(Option, javax.swing.GroupLayout.DEFAULT_SIZE, 240, Short.MAX_VALUE)) .addGroup(CtrlLayout.createSequentialGroup() .addContainerGap(30, Short.MAX_VALUE) .addComponent(onOk, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE) .addContainerGap(30, Short.MAX_VALUE) .addComponent(onCancel, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE) .addContainerGap(30, Short.MAX_VALUE))) .addContainerGap())); 2.设置纵向分布: CtrlLayout.setVerticalGroup( CtrlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(CtrlLayout.createSequentialGroup() .addContainerGap() .addGroup(CtrlLayout.createSequentialGroup().addComponent(Option)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(CtrlLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(onOk) .addComponent(onCancel)) .addContainerGap())); 这种管理模式只区分相对位置,对窗口尺寸变化有很好的适应性,但局限于较为规则的排列,复杂排列有待于进一步的研究; 此外先前还接触过一种管理模式: jContentPane = new javax.swing.JPanel(); java.awt.GridBagConstraints consGridBagConstraints2 = new java.awt.GridBagConstraints(); java.awt.GridBagConstraints consGridBagConstraints3 = new java.awt.GridBagConstraints(); java.awt.GridBagConstraints consGridBagConstraints1 = new java.awt.GridBagConstraints(); java.awt.GridBagConstraints consGridBagConstraints4 = new java.awt.GridBagConstraints(); java.awt.GridBagConstraints consGridBagConstraints6 = new java.awt.GridBagConstraints(); java.awt.GridBagConstraints consGridBagConstraints7 = new java.awt.GridBagConstraints(); java.awt.GridBagConstraints consGridBagConstraints5 = new java.awt.GridBagConstraints(); consGridBagConstraints1.insets = new java.awt.Insets(23,8,10,6); consGridBagConstraints1.ipady = 6; consGridBagConstraints1.ipadx = 8; consGridBagConstraints1.gridy = 0; consGridBagConstraints1.gridx = 0; consGridBagConstraints4.insets = new java.awt.Insets(22,6,8,8); consGridBagConstraints4.ipadx = 68; consGridBagConstraints4.fill = java.awt.GridBagConstraints.HORIZONTAL; consGridBagConstraints4.weightx = 1.0; consGridBagConstraints4.gridy = 0; consGridBagConstraints4.gridx = 1; consGridBagConstraints2.insets = new java.awt.Insets(23,8,10,6); consGridBagConstraints2.ipady = 6; consGridBagConstraints2.ipadx = 8; consGridBagConstraints2.gridy = 0; consGridBagConstraints2.gridx = 2; consGridBagConstraints5.insets = new java.awt.Insets(22,6,8,8); consGridBagConstraints5.ipadx = 68; consGridBagConstraints5.fill = java.awt.GridBagConstraints.HORIZONTAL; consGridBagConstraints5.weightx = 1.0; consGridBagConstraints5.gridy = 0; consGridBagConstraints5.gridx = 3; consGridBagConstraints3.insets = new java.awt.Insets(23,8,10,6); consGridBagConstraints3.ipady = 6; consGridBagConstraints3.ipadx = 8; consGridBagConstraints3.gridy = 0; consGridBagConstraints3.gridx = 4; consGridBagConstraints6.insets = new java.awt.Insets(22,6,8,8); consGridBagConstraints6.ipadx = 68; consGridBagConstraints6.fill = java.awt.GridBagConstraints.HORIZONTAL; consGridBagConstraints6.weightx = 1.0; consGridBagConstraints6.gridy = 0; consGridBagConstraints6.gridx = 5; consGridBagConstraints7.insets = new java.awt.Insets(20,8,6,6); consGridBagConstraints7.ipady = 3; consGridBagConstraints7.gridy = 0; consGridBagConstraints7.gridx = 6; jContentPane.setLayout(new java.awt.GridBagLayout()); jContentPane.add(getLblPro(), consGridBagConstraints1); jContentPane.add(getLblCity(), consGridBagConstraints2); jContentPane.add(getLblCountry(), consGridBagConstraints3); jContentPane.add(getComboPro(), consGridBagConstraints4); jContentPane.add(getComboCity(), consGridBagConstraints5); jContentPane.add(getComboCountry(), consGridBagConstraints6); jContentPane.add(getBtnSearch(), consGridBagConstraints7); 这种模式清晰明了,但需要像素级的计算。
个人分类: 系统工程|5388 次阅读|0 个评论
用worldwind java SDK开发应用程序
xat 2010-8-4 11:41
昨天天收到一邮件,才知道原来worldwind有了java版本的SDK,以前一直都不知道,很是惭愧。 于是今天就在网上搜索了下用worldwind java sdk,找到一个helloworld的例子,但是不知道什么原因,作者省略了一些重要的加载库的过程,对于我这种没用过jogl的人来说,又是一个不断尝试的过程,幸好查了一些方法之后,终于把例子做出来了。 闲话少说,按步骤一步一步来: 1. 下载worldwind java sdk 下载地址: http://builds.worldwind.arc.nasa.gov/download.asp 解压之后,可以获得jogl.jar、gluegen-rt.jar、worldwind.jar、gluegen-rt.dll、jogl.dll、jogl_awt.dll、jogl_cg.dll 2. 打开eclipse,创建java工程 1)在工程下创建lib文件夹,把第一步得到的3个jar包,放到lib目录下 2)在电脑上创建一个文件夹将第一步得到的4个DLL文件放进去 3)右击jogl.jar,Build Path---Configure Build Path----点击jogl.jar包,找到Native library location-Edit,将2.2的文件路径放到location path中,见图片。 3. 创建java文件 package cn.worldwind.test; import gov.nasa.worldwind.BasicModel; import gov.nasa.worldwind.awt.WorldWindowGLCanvas; public class Helloworld { public static class AppFrame extends javax.swing.JFrame { /** * */ private static final long serialVersionUID = 1L; public AppFrame() { WorldWindowGLCanvas wwd = new WorldWindowGLCanvas(); wwd.setPreferredSize( new java.awt.Dimension( 200, 200 ) ); this.getContentPane().add( wwd, java.awt.BorderLayout.CENTER ); this.pack(); wwd.setModel( new BasicModel() ); } } public static void main( String[] args ) { java.awt.EventQueue.invokeLater( new Runnable() { public void run() { new AppFrame().setVisible( true ); } } ); } } 4. 运行java文件即可。
个人分类: 未分类|8996 次阅读|0 个评论
解决运行citespace中java虚拟机无法启动的问题
热度 3 lovepuma 2010-7-26 23:25
一直以来用笔记本运行 citespace 就一直提示 could not creat the java virtual machine ,后来上网找一下,说是要改一下 JRE 的配置,但是一直没找到在哪里改。今天终于知道在哪里改 JRE 的配置了,原来是在 jnlp 文件中。用记事本打开,将 -Xmx 参数后面的 1024 改为 512 就好使了。 今天这件事情充分说明了量变和质变的关系,没白让我熬夜到现在,可以睡觉了!
12191 次阅读|3 个评论
遗传算法的初步理解
zswm27 2010-5-5 23:43
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 ga的java算法 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
个人分类: 学习之路|8029 次阅读|3 个评论
最简单的语言和最复杂的语言
热度 1 马红孺 2010-5-5 20:57
最近在学习 Matlab, 据说这是一个功能强大,易学易用的软件。学得很吃力,有那么多函数,怎么都记不住。 记得大学时开了一门课,叫FORTRAN程序设计,一学期,可能是36学时(或54?),没有见过计算机, 什么也没学会,只记得那位老师把FORTRAN读成 伐儿犬。大四做毕设,需要算一个定积分,开始在程序 纸上写程序,送给穿孔员做卡片,再把一叠卡片交给操作员,在机房外面等结果,才开始对Fortran有点认识。 研一时,导师买了一台IBM PC,8086 cpu,128k 内存(后扩充到384k),两个320k的5吋软驱, DOS1.0操作系统,带一个BASIC程序。开始用Basic算题。过了一阵,升级到dos2.0,又买了 Fortran编译器,突然发现用Fortran比用Basic快了很多,于是知道了编译语言和解释语言的差别。 在导师的带领下,我们一帮师兄弟在这台机器上制造了50余篇文章,还拿了一个自然科学四等奖。 过了一阵,感觉Fortran还是不够快,于是便拿着Dos2.0的说明书,用Debug写汇编程序,果然速度 又有提高。 再后来,计算机不断升级,但一直用Fortran写程序,从Fortran 4, 再到Fortran 77。 在用了10多年Fortran后,开始带学生了,突然发现学生竟然不懂Fortran,而是用C写程序。 为了与时俱进,借着给学生看程序的机会学会了C编程,后来为了赶时髦,又写过一点Java 程序。 比较起来,汇编语言是最简单的,学起来最容易,上手也最快,但要写一个大一点的程序, 需要付出的劳动最大。 Fortran和C差不多, Java稍为复杂一些,主要是比Fortran和C多了一些 概念。感觉最复杂的是 Matlab,折腾了两个星期了,还是记不住那些函数和命令。
个人分类: 胡言乱语|13839 次阅读|12 个评论
Java1.1基础
anny424 2010-5-4 20:06
跟着Java开发实战经典(名师讲坛)及其配套视频学习。李兴华,像新东方老师那样,讲得很有激情。适合初学者,强烈推荐。 //编译及运行////////////////////////////////////////////////////////// /* 运行cmd当前目录 javac 文件名.java //编译生成 文件名.class java 文件名 //运行 */ //数据类型//////////////////////////////////////////////////////////// /* 基本数据类型: 数值型 整型:byte位8, short短整数16, int整数32(默认), long长整数64 浮点型:float单精度32, double双精度64(默认) 字符型char2 布尔型boolean 引用数据类型: 类class 接口interface 数组 */ public class TestJava //文件名称必须与之一致,一个文件中只可有一个 { //代码段 public static void main(String args[]) { //整型 int num = 10 ;// 定义整型变量 num = 30 ; // 修改变量的内容 System.out.println(num的内容是: + num ) ; //ln 末尾换行 System.out.println(num * num = + num * num ) ; System.out.println(1) ; System.out.println(1.1) ; //扩大数据范围 int max = Integer.MAX_VALUE ;// 求出整型的最大值 System.out.println(整型的最大值 + 2: + ((long)max + 2)) ; //long扩大数据范围 //字符型 char ch1 = 'a' ;// 字符是使用'括起来的数据 char ch2 = 97 ;// 通过数字定义字符变量,其实就是a System.out.println(ch1 = + ch1) ; System.out.println(ch2 = + ch2) ; //浮点型 float numf = 3.0f ;// 定义一个浮点型变量,如果不加f,就会默认为double System.out.println(两个小数相乘: + numf* numf) ; //布尔型 boolean flag = true ;// 定义布尔型变量 System.out.println(flag = + flag) ;// 打印输出 //数据类型自动转换 int x = 30 ;// 定义整型变量 float y = 22.19f ;// 定义浮点型变量,位数大于整型 System.out.println(x / y = + (x / y)) ; //结果自动转换为浮点型 System.out.println(10 / 3.5 = + (10 / 3.5)) ; //结果自动转换为浮点型 System.out.println(10 / 3 = + (10 / 3)) ; //因为默认为整型,所以结果的小数点省略掉,默认为整型 String str = lixinghua ;// 定义字符串变量 int x = 30 ; str = str + x ;// 修改str的内容并将内容重新给str变量 System.out.println(str = + str) ; int i = 1 ;// 定义整型变量 int j = 2 ;// 定义整型变量 System.out.println(1 + 2 = + 1 + 2) ; //生成12,自动转换为字符串 System.out.println(1 + 2 = + (1 + 2)) ; //生成3 //数据类型手动转换 float f = 30.3f ;// 浮点型 int x = (int) f;// 强制类型转换 System.out.println(x = + x) ; System.out.println(10 / 3 = + ((float)10 / 3)) ;// 执行强制转换 } }; class A //可以有多个 { }; class B { }; //运算符////////////////////////////////////////////////////////////// ! //取反 % //取模,就是取余数 +, -, *, /, = //= 赋值 , , =, =, !=, == //== 判断 a++ // 先计算后自增 ++b // 先自增后计算 x-- // 先计算后自减 --y // 先自减后计算 a+=b // a+b的值存放到a中 a-=b // a-b的值存放到a中 a=b // ab的值存放到a中 a/=b // a/b的值存放到a中 a%=b // a%b的值存放到a中 a/= b-- //a= a/b 后,再计算b-- | // 或 || // 短路或,如果第一个条件true,那么后面的条件就不再判断了 // 与 // 短路与,如果第一个条件false,那么后面的条件就不再判断了 //循环语句//////////////////////////////////////////////////////////// //选择结构 if(52) { System.out.println(条件成立:5大于2) ; } else if ( ) { } else { } max = xy?x:y ;// 通过三目运算符求出最大值,if (xy){max = x;} else {max = y;} switch(oper) //只能使用数字或字符 { case '+': {// 执行加法操作 System.out.println(x + y = + (x + y )) ; break ; } case '-': {// 执行减法操作 System.out.println(x - y = + (x - y )) ; break ; } default: { System.out.println(未知的操作!) ; } } //循环结构 while(x=10) { sum += x ;// 进行累加操作 } do { sum += x ;// 执行累加操作 x++ ; } while(x=10) ; System.out.println(1 -- 10 累加的结果为: + sum) ; for(int i=1;i=9;i++) {// 控制行 for(int j=1;j=i;j++) {// 控制列 System.out.print(i+*+j+=+(i*j)+\t) ; } System.out.println() ; } //循环的中断 for(int i=0;i10;i++) { if(i==3) { continue ; } System.out.println(i = + i) ; for(int i=0;i10;i++) { if(i==3) { break ; } System.out.println(i = + i) ; } TIOBE Programming Community Index for April 2010 April Headline: C programming language back at number 1 position!
个人分类: 编程学习笔记|5959 次阅读|1 个评论
做个人生规划吧。。。
zswm27 2010-4-29 17:18
最近一直忙碌于各种各样的杂事中,买房子、学驾驶、上课。。。 好久都没有时间静下心来好好想想两年以后的自己想做什么,想在哪个方面发展,天天都是这个搞搞,那个弄弄,前段时间一直在搞WSN的覆盖问题,纠结了很久,只希望成果快点出来,也不浪费这段时间了,呵呵,觉得好多的事情都没有完成,好多事情摆在眼前都需要时间,想把java学好,结果只是皮毛,想把CAD看看也没有时间,真不知道我的时间都花在什么地方了,真是郁闷!现在却又急于将matlab的程序搞定。。。。
个人分类: 心情日记|4120 次阅读|0 个评论
简单的flex-java的程序
putin24 2010-4-13 14:48
使用 myeclipse 6.5.1 、 flex builder3.0做一个简单的flex-java的程序。 1 、创建 flex 项目: file - new - flex project 如下图1 Application type 中选 第一个 web application ; Server technology 中选择 j2ee, 勾选 user remote object access service ( 否则无法调用 java) 2 、点 next 按钮 ,下一界面如图2示。 在 J2EE Settings 中, 1) 选择一个 tomcat 服务器,点击 new- 到电脑安装过的 tomcat 安装目录; 2)Context root 设置为 MyFlex( 项目名称 ) ; 3) 指定 flex war file 文件 blazeds.war 的路径,(其作用是用来实现 java 和 flex 间的通信),可从网络上下载 blazeds.war ,然后选择 blazeds.war 存在的目录路径; 4)Compilation options 编译方式中选择 第一个可以节省服务器的开销; 5 ) output folder 与 Content folder 都一样,设置为 Webroot ; 3 、点 next 如图3,然后点 finish 。 4 、在项目上右键 myeclipse - add web project capabilities ,项目已经建好,现在做个 flex 访问 java 的例子。 在 MyFlex.mxml 中添加: mx:Script ! ] /mx:Script !-- mx:RemoteObject destination=Hello id=hlo endpoint=http://localhost:8080/FlexTest/messagebroker/amf result=show(event) /-- mx:RemoteObject destination= Hello id= hlo endpoint= http://localhost:8080/FlexText/messagebroker/amf mx:method name= sayHello result=show(event) / /mx:RemoteObject mx:Panel title= 调用 java width= 415 height= 278 mx:FormItem label= 输入: mx:TextInput id= input / /mx:FormItem mx:FormItem mx:Button label= 调用 click=say() / /mx:FormItem mx:FormItem label= 输出为: height= 79 mx:TextArea id= output width= 262 height= 78 /mx:TextArea /mx:FormItem /mx:Panel 5 、创建 java 文件 package com.test; public class Hello { /** * * @param name * @return */ public String sayHello(String name){ System. out .println(name+ say hello! ); return name+ say hello! ; } } 6 、配置 remote-config.xml 文件,添加: destination id = Hello properties source com.test.Hello / source / properties / destination 7 、通过 tomcat 发布项目 8 、在 myflex.mxml 文件上右键, run as - flex application : 输入 aaaa 点调用 如图4: 图1 图2 图3 图4
个人分类: 生活点滴|3564 次阅读|0 个评论
[Java的报错信息之一] Non-static variable/method cannot be referenced from a static cont
Refri2010 2010-3-27 21:00
问题】 程序报错信息如下: Non-static variable dB cannot be referenced from a static context Non-static method add(double) cannot be referenced from a static context 【程序代码图】 【分析】 Non-static variable / method 非静态变量,非静态方法。 static context 静态上下文,或者称为静态代码块 main( ) 方法是一个必须使用static 修饰符的静态方法, 在其方法内部,只能调用(使用)静态变量或静态方法。 非静态变量,非静态方法被调用时,都会出现以上错误提示。 ------------------------------------------------------------------------------------ 【建议】 关键的一条: 应首先在main( )方法内定义所在类的一个具体实例。 通过这个实例来引用类中的成员变量和成员方法。 类的其他方法(非静态方法)中,可以直接调用成员变量和成员方法。 因此main() 方法作为程序的入口,应该尽量少写代码语句。 将程序的主体功能部分放在类的其他(非静态)方法中。 【附录】 被static所修饰的成员变量和成员方法表明归某个类所有,它不依赖于类的特定实例,而被类的所有实例共享。 只要这个类被加载,Java虚拟机就能根据类名定位到它们。 调用非静态成员变量和成员方法, 只能首先定义一个类的实例,然后通过实例去调用。 如下 public static void main( ){ Example exam = new Example(); exam.dA = 10; exam.add(3); }
个人分类: 生活点滴|18224 次阅读|0 个评论
如何制作java类库文件?
Refri2010 2010-3-25 22:07
【背景】: 有一些经常用到的功能或函数,比如,冷媒物性计算函数。 想把它做成类库的形式。 这样每个新的程序需要计算物性时,就不用再重新写一遍物性计算函数了。 只需要,简单调用就可以了。 可以像调用java的基础类库一样,调用自己编写的类库。 【做法】 此时,可以将具有某种功能的函数编写成类文件,然后编译生成JAR文件(又称,打包)。 使用时,用import关键字引入就可以了。 【附录】 java程序打包的机理是: 把编译后的.class文件打包(生成)JAR文件。 JAR文件独立于任何操作系统平台,而且支持压缩格式。 最早时,是在DOS窗口内,利用jar命令,打包生成JAR(javaArchive)文件。 现在,随着IDE的广泛使用,利用IDE自带的功能,生成JAR文件。 生成JAR文件的目的是: 可执行的JAR文件包(相当于可执行.exe文件); ②提高java程序在网络上传输的速度。 对于①的理解,java程序一般是在某一编译环境下进行编写的,如NetBeans。 当编好的程序需要在其它电脑上运行时,但是该电脑没有安装NetBeans,或根本就没有安装JDK,则java源 文件就不能正常编译和运行了。 此时,如果有已经打包生成的JAR文件,则可以直接双击运行JAR文件。 效果就像是在NetBeans下运行java源程序一样。 对于②的理解,JAR文件类似于ZIP文件,是一种压缩文件,相对于java源程序文件和类文件,具有体积小的 优势。 本文所讲的是JAR包的第三个作用 ③制作java类库。(java类库是jar文件) 像动态链接库一样, 既不公开具体实现的源代码,又能让使用者方便的调用类中的方法和变量。
个人分类: 生活点滴|7742 次阅读|0 个评论
Java学习体会2
putin24 2010-1-15 14:06
一直还不知道个所以然的我,慢慢的开始不再厌恶这些代码,可能是因为自己反抗抵触的时间过了吧,原来学习走入了误区,总认为喜欢先进的,软件也更新到最新的,但是后来想想还是很奇怪,现在才从基础的一点一点小问题去解决,反而进步很快,渐渐地可能会忘记一些,但是比起以前的那种空对空要显得实在。 写 JSP 的时候很多都已经是 CSS 来控制页面的时候,我还是用 table 来处理。 1.Table 一些札记 table width=90% border=0 cellspacing=0 cellpadding=0 bordercolor=black bordercolorlight=black bordercolordark=white //table 的属性 tr align=center // 行 td height=25 colspan=2 bgcolor=005ece align=center STYLE=font-size:11pt; background=%=request.getContextPath()%/image/tablebanner.gif // 列 /td/tr a href=%=request.getContextPath()%/person/person_myself_look.do /a img src= 图片地址 width=300 height=400 / // 图片的引用 input type=image src= onclick=javascript:return(confirm(' 添加成功! ')) // 使用图片按钮 a href=%=request.getContextPath()%%=pagepath%?page=%=currentpage-1% 上一页 /a // 使用翻页 input type=text name=type value='%=node.getType()%' // 修改 %if( i%2==0) {%bgcolor=#f2F595% }% %if( i%2!=0) {%bgcolor=#f2b695% }% // 使用简单的 js 语言控制表格各行不一样颜色 . 2. 测试类札记 public static void main(String[] args){ //java 中测试实例 TreeJDBC tree=new TreeJDBC(); tree.deleteRecord(1); Collection col=tree.getAllnodesfromdatabase(); Iterator it=col.iterator(); while(it.hasNext()){ Treenode node=(Treenode)it.next(); System.out.println(node.getId()+, +node.getParentid()+, +node.getName()); } } node.setId(rs.getString(ID)); //set 方法 String manager =(String)request.getParameter(manager); //get 页面传输过来的参数 manager 3. 样式札记 head style type=text/css .button { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #3573CA; } input{ height:20px; border-color:blue; } select{ BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #FFFFFF 1px solid; FONT-SIZE: 15px; BORDER-LEFT: #FFFFFF 1px solid; COLOR:#003366; BORDER-BOTTOM: #000000 1px solid; BACKGROUND-COLOR: #f4f4f4; } /style/head // 页面直接调用样式,流行的是写在 CSS 文件中;在 head 中添加, link rel=stylesheet type=text/css href=%=contentPath%/css/input.css / input name=project_name class=inputstyle type=text // 调用样式类名称 inputstyle 希望新年里自己不断努力。 补充一点struts检验时间格式抛出异常笔记: String timeerrors = Change.checkdate(portfolio_time); if (!(timeerrors.equals(success))) { errors.add(ActionErrors.GLOBAL_ERROR, new ActionError( timeerrors)); saveErrors(request, errors); return mapping.findForward(false); } if (!mark) { saveErrors(request, errors); return mapping.findForward(false); }
个人分类: 生活点滴|3105 次阅读|0 个评论
Java学习总结
putin24 2009-12-31 01:42
实时总结,可能会有所收获吧,讲下 Servlet 与 struts1.x 的区别吧,最近在开发一个系统,系统由于前期规划不好,导致既有 Servlet 与 struts1.x 在作用,显得很不协调,但也很快的让我看出了其中一些区别。 1.Servlet 在 web.xml 里定义一个 servlet 的 name 和 mapping 的路径 /servlet/DisplayTemplate servlet description 显示模板的 servlet/description display-name 显示模板的 servlet/display-name servlet-nameDisplayTemplate/servlet-name servlet-classorg.example.servlet.DisplayTemplate/servlet-class /servlet servlet-mapping servlet-nameDisplayTemplate/servlet-name url-pattern/servlet/DisplayTemplate/url-pattern /servlet-mapping 而相比 struts 定义的方式却显得简化了,首先在 struts-config.xml 中定义一个 bean ,对应一个 form 。 form-beans form-bean name=xxxform type=com.office.actionform.xxxxxForm / /form-beans 在 mapping 中定义映射,指向的路径和 forward 的页面。 action-mappings action name=treeform parameter=xxx path=/project/xxx scope=request type=com.office.action.TreenodeAction forward name=add path=/project/addsuccessfully.jsp/ forward name=success path=/project/addsuccessfully.jsp / /action /action-mappings 其实从这点上看还是有很多的相似之处,但是 struts1.x 最大的好处是把这些零散的东西整理成一堆组织性更强的文件。 2. 稍微大一点的项目用 servlet 要写很多的 servlet.class 文件和很多的 doPost 和 doGet ,而用 struts 1.x 好在可以把相似的这些 servlet 写到一个 Action 里,通过 struts-config.xml 不同参数的选择,调用不同的方法来实现 jsp 与 java/DB 的通信,确实减少了很多文件的冗余; 3. struts 1.x 能在 jsp 页面大量使用比较简洁的 Struts 标签,减少了很多用 JavaScript 写的代码,但在页面中需要引入定义好的标签。 %@ taglib uri=struts-html prefix=html % %@ taglib uri=struts-bean prefix=bean% %@ taglib uri=struts-logic prefix=logic% 注释: Servlet 是一个标准服务器端程序,执行商务逻辑,处理 HTTP 请求 =Server+let e.g. MIDlet=MIDP+let ; Applet=Application+let Javax.servlet.Servlet Servlet 的生命周期对应的三个方法: init() 初始化方法, service (), destroy() JS 部分代码 script function ok(){ var nodeid='%=nodeid%'; document.forms .action=document.forms .action+?nodeid=+nodeid; document.forms .submit(); } /script action=%=path%/Addnode tdselect name=task_resource % List grouplist = (List) request.getAttribute(grouplist); for (int i = 0; i grouplist.size(); i++) { ResourceForm tt = (ResourceForm) grouplist.get(i); % option value=%=tt.getGroup_id()%%=tt.getGroup_id()+tt.getGroup_name()%/option % } % /select /td trtdinput type=button onclick=javascript:ok(); name= 确定 value= 确定 //td/tr Struts 标签 html:form action=/project/add_node.do?addtype=link html:options collection=grouplist property=value labelProperty=label //html:select /td html:submit value= 添加 styleClass=button/html:select property=task_resource
个人分类: 学术笔记|2381 次阅读|1 个评论
java 中static
chenyan911 2009-7-16 10:20
一、static 请先看下面这段程序: public class Hello{ public static void main(String args){ Simple.go(); } } 调用一个静态方法就是类名.方法名,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。 静态变量 静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了。看下面这段代码: class Value{ static int c=0; static void inc(){ c++; } } class Count{ public static void prt(String s){ System.out.println(s); } public static void main(String args){ Count ct=new Count(); prt(ct.c=+ct.v.c); prt(v1.c=+v1.c+ v2.c=+v2.c); v1.inc(); prt(v1.c=+v1.c+ v2.c=+v2.c); prt(ct.c=+ct.v.c); } } 运行结果如下: v1.c=0 v2.c=0 v1.c=27 v2.c=27 v1.c=15 v2.c=15 ct.c=10 v1.c=10 v2.c=10 v1.c=11 v2.c=11 ct.c=11 这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。 通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示: public class StaticCls{ public static void main(String[] args){ OuterCls.InnerCls oi=new OuterCls.InnerCls(); } } class OuterCls{ public static class InnerCls{ InnerCls(){ System.out.println(InnerCls); } } } 输出结果会如你所料: InnerCls 和普通类
个人分类: java|2903 次阅读|0 个评论
学习JAVA语言
ctao 2009-5-3 21:32
必须要学习一们语言了.先学JAVA吧
个人分类: 未分类|3785 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-8 00:51

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部