Eclipse添加class报错

新版eclipse在直接添加class时,会直接报错,让用户删除class类
类似于这样
这是因为在创建class的过程中出现了问题
解决办法是在:
创建class的时候同时需要给你的class所在的包进行命名

(下图中的Package中输入你想输入的名字)
在这里插入图片描述
结果如下图(class成功创建成功):
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
JDK环境变量配置: 1,新建变量名:JAVA_HOME,变量值:C:\Program Files\Java\jdk1.7.0 2,打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 3,新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 备注: 1,.表示当前路径,%JAVA_HOME%就是引用前面指定的JAVA_HOME; 2,JAVA_HOME指明JDK安装路径,此路径下包括lib,bin,jre等文件夹,tomcat,eclipse等的运行都需要依靠此变量。 3,PATH使得系统可以在任何路径下识别java命令。 4,CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别。 那么你的JDK就配置成功了,当然最好是再试验一下是否配置成功,那么就写一个简单的程序验证一下: Public class Test{ public static void main{ System.out.println("successful"); } } 运行代码,如果没问题,那一切OK,有问题,请检查一下上边所写的是否有错。 Tomcat环境变量配置: 如果你的Tomcat安装在C盘里,如:c:\tomcat(在这里切记一下,安装Tomcat时,在其字母周围一定不要存在空格,否则最后可能导致配置不成功) 1,新建变量名:CATALINA_BASE,变量值:C:\tomcat 2,新建变量名:CATALINA_HOME,变量值:C:\tomcat 3,打开PATH,添加变量值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin 确定后你的Tomcat就配置好了,同样要验证是否配置成功,那就运行Tomcat,点击启动(或Start service)后,打开浏览器,敲入http://localhost:8080,如果出现页面,那么配置成功。 经常看到许多人问如何配置JDK和JSP,现在我把方法总结下,希望对大家有所帮助。 第一步:下载jdk和tomcat 第二步:安装和配置你的jdk和tomcat:执行jdk和tomcat的安装程序,然后设置按照路径进行安装即可。 1.安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的jdk安装在c:\jdk1.6): JAVA_HOME=c:\jdk1.6 classpath=. ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;(.;一定不能少,因为它代表当前路径) path=%JAVA_HOME%\bin 接着可以写一个简单的java程序来测试JDK是否已安装成功: public class Test{ public static void main(String args[]){ System.out.println("This is a test program."); } } 将上面的这段程序保存为文件名为Test.java的文件。 然后打开命令提示符窗口,cd到你的Test.java所在目录,然后键入下面的命令 javac Test.java java Test 此时如果看到打印出来This is a test program.的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。 2.安装Tomcat后,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的tomcat安装在c: \Tomcat): CATALINA_HOME: C: \Tomcat CATALINA_BASE: C: \Tomcat TOMCAT_HOME: C:\Tomcat 然后修改环境变量中的classpath,把tomat安装目录下的common\lib下的servlet.jar追加到classpath中去,修改后的classpath如下: classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%\common\lib\servlet.jar; 接着可以启动tomcat,在IE中访问http://localhost:8080,如果看到tomcat的欢迎页面的话说明安装成功了。 第三步:建立自己的jsp app目录 1.到Tomcat的安装目录的webapps目录,可以看到ROOT,examples, tomcat-docs之类Tomcat自带的的目录; 2.在webapps目录下新建一个目录,起名叫myapp; 3.myapp下新建一个目录WEB-INF,注意,目录名称是区分大小写的; 4.WEB-INF下新建一个文件web.xml,内容如下: <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>My Web Application</display-name> <description> A application for test. </description> </web-app> 5.在myapp下新建一个测试的jsp页面,文件名为index.jsp,文件内容如下: <html><body><center> Now time is: <%=new java.util.Date()%> </center></body></html> 6.重启Tomcat 7.打开浏览器,输入http://localhost:8080/myapp/index.jsp 看到当前时间的话说明就成功了。 第四步:建立自己的Servlet: 写入你的第一个Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response)th rows ServletException,IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>"); out.println("This is my first Servlet"); out.println("</title></head><body>"); out.println("<h1>Hello,World!</h1>"); out.println("</body></html>"); } } 然后照样用javac HelloWorld.java来编译这个文件,如果出现无法import javax.servl et.* 那么就是应该把C:\Tomcat\common\lib里面的servlet.jar文件拷贝到C:JDKjrelibe xt中,再次编译,就没有问题了! 然后在Tomcat目录里面的C:\Tomcat\webapps\ROOT里面按如下的文件结构: ROOT\index.html ROOT\welcom.jsp ROOT\WEB-INF\lib\MyServlet.jar(如果你的servlet的.class打成了.jar文件,则放在 lib下面) ROOT\WEB-INF\classes\HelloWorld.class(把上面生成的HelloWorld.class文件放在这个 里面) 然后在浏览器中输入http://localhost:8080/servlet/HelloWorld,于是Server众望所归的报错了:Error 404--Not Found 怎么回事呢? Servlet必须使用C:\Tomcat\webapps\ROOT\WEB-INF这个目录下面的web.xml文件进行注册, 用EP打开这个web.xml文件, 把下面这段程序 servlet> ..... </servlet> <servlet-mapping> ...... </servlet-mapping> 替换成 <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/servlet/HelloWorld</url-pattern> </servlet-mapping> 如果没有的话,就直接加那段代码 为什么呢? 因为 这样的结构 <servlet> <servlet-name>HelloWorld</servlet-name> <servlet-class>HelloWorld</servlet-class> </servlet> 表示指定包含的servlet类. 而以下的结构 <servlet-mapping> <servlet-name>HelloWorld</servlet-name> <url-pattern>/servlet/HelloWorld</url-pattern> </servlet-mapping> 表示指定HelloServlet应当映射到哪一种URL模式。 在修改web.xml完毕过后,重新启动Server,然后再输入http://localhost:8080/servlet/HelloWorld,那么偌大一个Hello,World!等 着你呢,恭喜你 摆平了:) 在JSP文件开头加入下面这条语句可以实现中文名称显示 <%@ page language="java" contentType="text/html; charset=gb2312" %> 修改tomcat目录下conf\server.xml为 port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/> 注意黑体部分是修改的地方,修改之后就可以让TOMCAT支持中文链接了。 上面是完整的配置方法,还可以上tomcat支持中文,其实我空间里都有。
本项目详细介绍请看:http://www.sojson.com/shiro (强烈推荐) Demo已经部署到线上,地址是http://shiro.itboy.net, 管理员帐号:admin,密码:sojson.com 如果密码错误,请用sojson。 PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快,有问题加群解决。 声明: 本人提供这个Shiro + SpringMvc + Mybatis + Redis 的Demo 本着学习的态度,如果有欠缺和不足的地方,给予指正,并且多多包涵。 “去其糟粕取其精华”。如果觉得写的好的地方就给个赞,写的不好的地方,也请多多包涵。 使用过程: 1.创建数据库。 创建语句 :tables.sql 2.插入初始化数据 插入初始化数据:init.data.sql 3.运行。 管理员帐号:admin 密码:sojson ps:定时任务的sql会把密码改变为sojson.com 新版本说明:http://www.sojson.com/blog/164.html 和 http://www.sojson.com/blog/165.html 主要解决是之前说的问题:Shiro 教程,关于最近反应的相关异常问题,解决方法合集。 项目在本页面的附件中提取。 一、Cache配置修改。 配置文件(spring-cache.xml )中已经修改为如下配置: <!-- redis 配置,也可以把配置挪到properties配置文件中,再读取 --> <!-- 这种 arguments 构造的方式,之前配置有缺点。 这里之前的配置有问题,因为参数类型不一致,有时候jar和环境的问题,导致参数根据index对应,会处理问题, 理论上加另一个 name,就可以解决,现在把name 和type都加上,更保险。 --> 二、登录获取上一个URL地址报错。 当没有获取到退出前的request ,为null 的时候会报错。在(UserLoginController.java )135行处有所修改。 /** * shiro 获取登录之前的地址 * 之前0.1版本这个没判断空。 */ SavedRequest savedRequest = WebUtils.getSavedRequest(request); String url = null ; if(null != savedRequest){ url = savedRequest.getRequestUrl(); } /** * 我们平常用的获取上一个请求的方式,在Session不一致的情况下是获取不到的 * String url = (String) request.getAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE); */ 三、删除了配置文件中的cookie写入域的问题。 在配置文件里(spring-shiro.xml )中的配置有所修改。 <!-- 会话Cookie模板 --> <!--cookie的name,我故意取名叫xxxxbaidu --> <!--cookie的有效时间 --> <!-- 配置存储Session Cookie的domain为 一级域名 --> 上面配置是去掉了 Session 的存储Key 的作用域,之前设置的.itboy.net ,是写到当前域名的 一级域名 下,这样就可以做到N 个 二级域名 下,三级、四级....下 Session 都是共享的。 <!-- 用户信息记住我功能的相关配置 --> <!-- 配置存储rememberMe Cookie的domain为 一级域名 --> <!-- 30天时间,记住我30天 --> 记住我登录的信息配置。和上面配置是一样的道理,可以在相同 一级域名 下的所有域名都可以获取到登录的信息。 四、简单实现了单个帐号只能在一处登录。 我们在其他的系统中可以看到,单个帐号只允许一人使用,在A处登录了,B处再登录,那A处就被踢出了。如下图所示。 但是此功能不是很完美,当A处被踢出后,再重新登录,这时候B处反应有点慢,具体我还没看,因为是之前加的功能,现在凌晨了,下次我有空再瞧瞧,同学你也可以看看,解决了和我说一声,我把功能修复。 五、修复功能(BUG) 1.修复权限添加功能BUG。 之前功能有问题,每当添加一个权限的时候,默认都给角色为“管理员”的角色默认添加当前新添加的权限。这样达到管理员的权限永远是最大的。由于代码有BUG ,导致所有权限删除了。现已修复。 2.修复项目只能部署到Root目录下的问题。 问题描述:之前项目只能部署到Root 下才能正常运行,目前已经修复,可以带项目路径进行访问了,之前只能这样访问,http://localhost:8080 而不能http://localhost:8080/shiro.demo/ 访问,目前是可以了。 解决方案:在 FreeMarkerViewExtend.java 33行处 增加了BasePath ,通过BasePath 来控制请求目录,在 Freemarker 中可以自由使用,而 JSP 中是直接在 JSP 中获取BasePath 使用。 解决后遗症:因为我们的权限是通过URL 来控制的,那么增加了项目的目录,导致权限不能正确的判断,再加上我们的项目名称(目录)可以自定义,导致更不好判断。 后遗症解决方案:PermissionFilter.java 50行处 解决了这个问题,详情请看代码和注释,其实就是replace 了一下。 HttpServletRequest httpRequest = ((HttpServletRequest)request); /** * 此处是改版后,为了兼容项目不需要部署到root下,也可以正常运行,但是权限没设置目前必须到root 的URI, * 原因:如果你把这个项目叫 ShiroDemo,那么路径就是 /ShiroDemo/xxxx.shtml ,那另外一个人使用,又叫Shiro_Demo,那么就要这么控制/Shiro_Demo/xxxx.shtml * 理解了吗? * 所以这里替换了一下,使用根目录开始的URI */ String uri = httpRequest.getRequestURI();//获取URI String basePath = httpRequest.getContextPath();//获取basePath if(null != uri && uri.startsWith(basePath)){ uri = uri.replace(basePath, ""); } 3.项目启动的时候报错,关于JNDI的错误提示。 其实也不是错,但是看着不舒服,所以还得解决这个问题。解决这个问题需要在web.xml 中的开始部位加入以下代码。 spring.profiles.active dev spring.profiles.default dev spring.liveBeansView.mbeanDomain dev 4.项目Maven打包问题。 打包的时候,不同版本的 Eclipse 还有IDEA 会有打包打不进去Mapper.xml 文件,这个时候要加如下代码(群里同学提供的)。 src/main/java **/*.properties **/*.xml false 在 标签内加入即可,如果还是不能解决,那么请你加群(改名后)说明你的问题,有人会回答你。 5.Tomcat7以上在访问JSP页面的时候,提示JSTL错误。 这个错误是因为Tomcat7 中没有 JSTL 的jar包,现在已经在项目pom.xml 中增加了如下 jar 的引入管理。 javax.servlet jstl 1.2 javax.servlet jsp-api 2.0 provided 如果还是不能解决问题,请在官方群(群号:259217951)内搜索“jstl” 如图下载依赖包。
1. 关于动态加载机制?? 学习Java比C++更容易理解OOP的思想,毕竟C++还混合了不少面向过程的成分。很多人都能背出来Java语言的特点,所谓的动态加载机制等等。当然概念往往是先记住而后消化的,可有多少人真正去体会过动态加载的机制,试图去寻找过其中的细节呢? 提供大家一个方法: 在命令行窗口运行Java程序的时候,加上这个很有用的参数: java -verbose *.class 这样会清晰的打印出被加载的类文件,大部分是jdk自身运行需要的,最后几行会明显的看到自己用到的那几个类文件被加载进来的顺序。即使你声明了一个类对象,不实例化也不会加载,说明只有真正用到那个类的实例即对象的时候,才会执行加载。这样是不是大家稍微能明白一点动态加载了呢?^_^ 2. 关于寻找class文件原理?? 建议大家在入门的时候在命令行窗口编译和运行,不要借助JCreator或者Eclipse等IDE去帮助做那些事情。尝试自己这样做: javac -classpath yourpath *.java java -classpath yourpath *.class 也许很多人都能看懂,设置classpath的目的就是告诉编译器去哪里寻找你的class文件. 不过至少笔者今日才弄懂JVM去查询类的原理,编译器加载类要依靠classloader, 而classloader有3个级别,从高到低分别是BootClassLoader(名字可能不准确) , ExtClassLoader, AppClassLoader. 这3个加载器分别对应着编译器去寻找类文件的优先级别和不同的路径:BootClassLoader对应jre/classes路径,是编译器最优先寻找class的地方 ExtClassLoader对应jre/lib/ext路径,是编译器次优先寻找class的地方 AppClassLoader对应当前路径,所以也是编译器默认找class的地方 其实大家可以自己写个程序简单的测试,对任何class,例如A, 调用new A().getClass().getClassLoader().toString() 打印出来就可以看到,把class文件放在不同的路径下再次执行,就会看到区别。特别注意的是如果打印出来是null就表示到了最高级 BootClassLoader, 因为它是C++编写的,不存在Java对应的类加载器的名字。 寻找的顺序是一种向上迂回的思想,即如果本级别找不到,就只能去本级别之上的找,不会向下寻找。不过似乎从Jdk1.4到Jdk1.6这一特点又有改变,没有找到详细资料。所以就不举例子了。告诉大家设计这种体系的是Sun公司曾经的技术核心宫力先生,一个纯种华人哦!^_^ 这样希望大家不至于迷惑为什么总报错找不到类文件,不管是自己写的还是导入的第三方的jar文件(J2ee中经常需要导入的)。 3. 关于jdk和jre?? 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦, 还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢? 学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。 Jdk 是java development kit,是java的开发工具包,里面包含了各种类库和工具。当然也包括了另外一个Jre. 那么为什么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server两个文件夹下都包含一个jvm.dll。 说明是有两个虚拟机的。这一点不知道大家是否注意到了呢? 相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为 jre只是一个运行环境而已。与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的 jvm, 而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。 记得在环境变量path中设置jdk/bin路径麽?这应该是大家学习Java的第一步吧, 老师会告诉大家不设置的话javac和java是用不了的。确实jdk/bin目录下包含了所有的命令。可是有没有人想过我们用的java命令并不是 jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk/bin目录下的java.exe剪切到别的地方再运行 java程序,发现了什么?一切OK! 那么有人会问了?我明明没有设置jre/bin目录到环境变量中啊? 试想一下如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,验证的方法很简单,大家看到了系统环境变量的 path最前面有“%SystemRoot%\system32;%SystemRoot%;”这样的配置,那么再去Windows/system32下面去看看吧,发现了什么?有一个java.exe。 如果强行能够把jdk/bin挪到system32变量前面,当然也可以迫使使用jdk/jre里面的java,不过除非有必要,我不建议大家这么做。使用单独的jre跑java程序也算是客户环境下的一种测试。 这下大家应该更清楚jdk和jre内部的一些联系和区别了吧?
Roller4.0的另外一套cas简单解决方案. 最近在使用roller4.0和cas的单点登录集成.中间碰到了很多很多的问题.也许我碰到的问题都是属于自己的技术不成熟,能力不够引起的.但是我想应该还是有很多人和我是差不多的吧.我把自己碰到的问题和解决方案写出来和大家探讨一下.毕竟网上关于roller4的资料少之又少.对于cas的单点集成就更是少的可怜.我试验了一下roller自带的security.xml配置的cas方案.简直报错的夸张.根本没发用.roller使用的是acegi的用户验证框架.我自己下了一套acegi配置了一下.成功了.同样的方法放到roller里面就挂掉了..(无语中….)所以只好另找方法. 注:下文中所说的如图均在该文所附带的下载包中有相应的word说明. 1.搭建roller的myeclipse环境. 首先搭建roller环境.老实讲.我一直觉得roller的源码下下来有问题.从官网下载下来后的源码会少一些文件.并且里面还有一些文件有错.是不能直接发布在eclipse当中的.但是下面的方法是需要介入到源码的.没有办法.只好采用一些bt的办法了. 首先.我们需要下载roller的源码以及它发布好了的代码. apache-roller-4.0.zip apache-roller-src-4.0.zip 在eclipse中新建web项目.比如我新建的web项目为: 说明一下.下载下来的源码是少了一些配置文件的.而且源码里面的pojos包里面的源码是有问题的.这也就是不能发布的主要原因.不过我们做cas集成.不需要改原来的表结构.所以我们可以使用它已经发布了的jar中的pojos包下的类.做法如下: 将apache-roller-src-4.0\apache-roller-src-4.0\apps\weblogger\src\java目录下面的org目录全部copy到自建项目的src目录下面. 然后打开官方提供的可以直接部署的那套发布包(不是源码了哦.!) 将apache-roller-4.0\apache-roller-4.0\webapp\roller\WEB-INF\classes目录下面的除了org目录外的所有文件都copy到自建项目的src目录中. 删除自建项目中: org\apache\roller\weblogger目录下面的pojos目录及该目录下的所有代码. 因为我们还是需要pojos目录中的代码的.所以要从其他的地方取. 打开官方发布可以直接部署的代码里面的jar,路径为: apache-roller-4.0\webapp\roller\WEB-INF\lib下面的roller-business.jar用winrar打开. 如图: roller-business.jar,进入到jar里面的roller-business.jar\org\apache\roller\weblogger目录中.删除该目录中除了pojos目录的其他四个目录以及那个webloggerException类. 配置web目录中的内容. 打开官方发布的可直接发布的部署包apache-roller-4.0\apache-roller-4.0\webapp\roller的目录,将该目录下面除了web-inf目录的其他所有文件复制到自建项目的/WebRoot目录下面 自建项目目录结构: (myeclipse建立的web项目应该都有这个目录吧.忽忽.自己看着办吧.) 打开官方发布的可直接发布的部署包apache-roller-4.0\webapp\roller\WEB-INF的目录,复制除了classes目录以外的所有目录到自建项目的WEB-INF目录下面.这里要注意一下.就是lib目录.首先lib目录中我们已经修改了roller-business.jar.删除了除了pojos包下的其他所有的类.我们保留这个jar的原因还有就是在roller-business.jar\META-INF目录中还有两个配置文件需要用到.索性直接导入这个jar.除此之外.,我们还要删除lib下的roller-web.jar.默认的src目录下的所有java文件在官方发布的时候打成了roller-business.jar和roller-web.jar两个jar.所以多余的那个jar我们还是删掉好了. 然后最终搭建出来的目录结构就是这样的: 然后到目前为止.我们就可以使用这个项目来发布了.其他的配置文件修改.什么数据库修改之类的.各位可以参看一下网络的其他资料.多如牛毛.比如cas的配置等等. 下面我主要说一下我改动的地方. 2.与cas的集成. 记得在这里要导入cas需要的客户端jar.我导入的是yale大学的casclient. 我首先试了一下修改roller自带的security.xml配置文件.报错的离谱.还碰到了其他的灵异问题.最灵异的问题是当我打开security.xml的cas配置属性.发布到tomcat时.会影响其他与其共存的与cas集成的系统.这让我好郁闷.这哪里是系统啊..怎么像病毒啊.会导致我其他访问cas的系统无法在得到从cas返回的用户名验证.晕倒. 我的解决方法是直接更改它的登陆页面链接.和登陆链接. 首先修改security.xml. 修改authenticationProcessingFilterEntryPoint节点为下面: <bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <!-- <property name="loginFormUrl" value="/roller-ui/login.rol"/> --> <property name="loginFormUrl" value="/mytest/myloginAction!gotoCas.rol"/> <property name="forceHttps" value="false"/> </bean> 添加节点: <bean id="myloginAction" class="com.mylogin.MyloginAction"> <property name="userDetailsService" ref="jdbcAuthenticationDao"/> </bean> 修改/roller/src/struts.xml文件 ..................剩下的具体看上传的文档和包内的说明以及源码实现
下面开始本次Stable2.0的破解步骤(其实和1.0一样,大概写一下,就不重新截图了) 0.先说一下Usercode需要自己填写,这个随意 然后SystemId需要点击按键生成——这个如果提示 Cannot find JNIWrapper native library (jniwrap.dll) in java.library.path: 这样的错误,不要紧,再点一下应该就出来了,还是没有的话请注意权限问题(主要是Mac和Linux) 还有就是破解之前请不要开启你的MyEclipse,要保持刚安装完的状态,如果你已经开过了,卸载重装吧——否则你就会遭遇打开编译器,然后校验失败,报错关闭 工作空间需要用新的,不要用旧版本的了——如果你是Stable1.0破解过,正常用的工作空间也可以 1.请确定你的算号器,也就是myeclipse2015_keygen文件夹中有privateKey.bytes(传说中的私钥)和publicKey.bytes(传说中的公钥),如果我的压缩包你解压以后没删过东西应该是有的 2.请确定你没有点过算号器的RebuildKey,保证公钥和私钥没有被换过 3.满足上述条件请略过第三步;如果上述条件不满足,也没关系,就是麻烦一点儿—— 3.1首先点击RebuildKey,重新生成公钥和私钥 3.2用winrar打开 com.genuitec.eclipse.server.core_XXXXXXXX.jar 这个jar包,用新生成的publicKey.bytes替换进去(路径是com\genuitec\eclipse\server\core),替换完不要做其他操作,关闭就好 3.3然后可以进行后面的步骤了(注意做完第三步不要再手贱去点RebuildKey了,点一次就要重新进行一下3~7步,因为要保证生成注册码时候的密钥和jar包里的一致) 4.选择版本——算号器我添加了Bling版的,大家懂的 5.在算号器填好Usercode,并生成了SystemId后,点Active 6.点SaveProperites把注册码保存到文件,这样就不用手动填了——如果有以前版本的,想要多版本共存,请看后面吧 7.把补丁包(patch)里的plugins复制到MyEclipse的plugins覆盖原文件(可以参考1.0的破解步骤里面的图) *Mac用户注意:Mac版的插件目录在MyEclipse 2015.app/Contents/Profile/plugins,替换时候请注意要选合并,不是覆盖(覆盖会把整个文件夹替换掉,不该删的都没了,后果自己脑补吧) 8.最后一步,MyEclipse的plugins/com.genuitec.eclipse.mobile.phonegap.core_13.0.0.me201504281437这个文件夹中,bin/com/genuitec/eclipse/mobile/phonegap/core/internal 以及 com/genuitec/eclipse/mobile/phonegap/core/internal 里面,都要删除 PhonegapProjectManagerImpl$1.class 和 PhonegapProjectManagerImpl$2.class,一共4个内部类,切记一定要删掉(参考http://tieba.baidu.com/p/3565112704?pid=64089385838&cid=0#64089385838) 接下来就可以用了 想要多版本共存的,有两种方法,一种是备份 .myeclipse.properties 这个文件(保存的注册信息),然后根据你想要用的版本去换 另一种办法一劳永逸的,使用同一个公钥(publicKey.bytes)替换掉各版本的com.genuitec.eclipse.server.core_XXXXXXXX.jar包中的对应文件,这种办法需要各版本MyEclipse都是同一种授权的,比如都是Professional,都是Bling之类的 注意点我都写在步骤里了,大家认真看,看明白了再动手,完全按照我给的步骤,不会出现各种奇葩问题的(比如还是会报校验错误,比如Web工程不能新建,比如视图问题)
JAVA高级特性 1.静态导入:先举个离例子 。 import java.lang.Integer.parseInt; public class StaticImport { int x = parseInt("123"); System.out.println(x); } 这样的程序如果不在IDE 工具中输入,是很难看出这个程序代码会出现问题,可它偏偏就出问题了,这是为什么呢?因为程序里面有个静态方法,如果导入import static java.lang.Integer.parseInt;这样的程序就可以运行了。 2.可变参数与for循环增强 这个是一般的用法: public static void loop(String[] args){ for(int i=0;i<args.length;i++) { System.out.println(args[i]); } } 这个是JDK 增加的新特性的用法! public static void loop(int x,int... args ) { //这里的参数一定要以这样的形式输入 for(int i:args) { System.out.println(i); } } 3.枚举 写枚举技巧: 1. enum Gender{MALE,FEMALE,BOTH} 2. enum Gender{MALE,FEMALE,BOTH;public abstract getTitle();} 3.enum Gender{MALE{},FEMALE{},BOTH{};public abstract getTitle();} 4.填充各个{}中的getTitle方法。 下面是个红绿黄灯的例子: public enum TrafficLamp { RED(30){ public TrafficLamp next() { return GREEN; } }, GREEN(50){ public TrafficLamp next() { return YELLOW; } }, YELLOW(5){ public TrafficLamp next() { return RED; } }; public abstract TrafficLamp next(); private int time; private TrafficLamp(int time) { this.time = time; } 4.反射. 这个知识点,真是费了我好大劲才理解。当真正理解了,其实也就不难了。先举例子来理解什么是反射。 先建这样的一个类,带会下面有个类里面有反射成员变量的方法的! public class ReflectPoint { private int x; public int y; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } } public class Test{ String obj = (String)Class.forName("java.lang.String").newInstance(); 这是制造另一个章:Class.forName("java.lang.Integer") --------------------- 讲Constructor://构造方法 Constructor constructors[] = Class.forName("java.lang.String").getConstructors(); Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class); String str = (String)constructor.newInstance(new StringBuffer("abc")); System.out.println(str); class.newInstance()内部其实就是在用默认的构造方法 ----------------------- 讲Method //方法 Method charAt = Class.forName("java.lang.String").getMethod("charAt", int.class); System.out.println(charAt.invoke(str, 1)); ------------------------- 讲Field //成员变量 ReflectPoint point = new ReflectPoint(1,7); Field y = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("y"); y.setAccessible(true); System.out.println(y.get(point)); Field x = Class.forName("cn.itcast.corejava.ReflectPoint").getDeclaredField("x"); x.setAccessible(true); System.out.println(x.get(point)); } 在这里我们运行的时候可以看出,ReflectPoint类里面的x和y 都可以打印出来了! 学习心得:先从这四个知识点来看,张老师的确很让人敬佩!以上的一些程序代码均为张老师课堂即兴发挥所写,也可以看出,张老师对JAVA特性的深刻理解能力!现在说说我对这些程序代码的理解,说实话,才开始听张老师讲的时候,我感觉很模糊的,但是当我真正理解了之后,觉得这些程序写的真是太好了。象以后我门在学习JAVA 的时候,一定要对每个知识点要慢慢的消化吃透,切不能走马观花。一个知识点必须要反复的动手练习,不然很难理解其中的奥秘所在的! 5.在JAVA的程序中,我经常性的看到字符前面有@这种标志的符号.这个就叫做注解! 下面是使用 @SuppressWarnings 来取消 deprecation 警告的一个例子: public class Test { @Deprecated //在eclipse下运行的时候,方法名上会加一横线 public static void sayHello() { } } public class Test2 { @SuppressWarnings("deprecation") //在mian方法内调用一个没有定义的方法时,运行的时候将会出现这一注解! public static void main(String [] args) { Test.sayHello(); } } @SuppressWarnings 批注允许您选择性地取消特定代码段(即,类或方法)中的警告。其中的想法是当您看到警告时,您将调查它,如果您确定它不是问题,您就可以添加一个 @SuppressWarnings 批注,以使您不会再看到警告。虽然它听起来似乎会屏蔽潜在的错误,但实际上它将提高代码安全性,因为它将防止您对警告无动于衷 — 您看到的每一个警告都将值得注意。 由如下代码引出@Override的讲解: User类中的方法: public boolean equals(User other) { return name.equals(other.name); } 下面的代码执行时将有问题: User user1 = new User(); User user2 = new User(); user1.setName("abc"); user2.setName("abc"); System.out.println(user1.equals(user2)); HashSet set = new HashSet(); set.add(user1); set.add(user2); System.out.println(set.size());//期望结果为1,但实际为2 这时候在User类的equals方法上加上@Override,发现了问题。 再看看这个代码:一看就知道有问题, 这里 就有个很好的解决办法,在写public @interface MyAnnotation {}这样的类的时候,下面的代码上的错误提示就是结束的! public class dsds { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub System.out.println(User.class.isAnnotationPresent(MyAnnotation.class) ); System.out.println( User.class.getAnnotation(MyAnnotation.class) ); } } 运行的结果为:false null 下面演示了一下@Target和@Retention import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE}) //用于构造方法 @Retention(RetentionPolicy.RUNTIME) //在运行是加载Annotation到JVM中 public @interface MyAnnotation { public String value() default "yellow"; public int[] array() default {1,2}; public MetaAnnotation annotation() ; } 注解最主要的就是这么多,其实注解真正的,我们都很少留心的,但是有的注解会给你在写程序和查找错误的时,会有很大的帮助的! 6.泛型: 1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 3、泛型的类型参数可以有多个。 4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。 5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String); 例子: a..使用?通配符可以引用其他各种参数化的类型,但不能调用与参数化有关的方法; Collection<?> c = new Vector<String>(); c.add("abc");//报错 c.size();//正确 所以,?通配符定义的变量主要用作引用,调用与参数化无关的方法,如果要调用与参数化相关的方法,那么必须在使用?通配符引用之前调用,否则就与java 5提供泛型的目的背道而驰了。 b..向下限定通配符: 正确:Vector<? extends Number> x = new Vector<Integer>(); 错误:Vector<? extends Number> x = new Vector<String>(); 向上限定通配符: 正确:Vector<? super Integer> x = new Vector<Number>(); 错误:Vector<? super Integer> x = new Vector<Byte>(); 7.代理 这里就直接先应用张老师写的代码然后再讲清其原理吧! package cn.itcast.corejava; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Collection; import java.util.Vector; public class ProxyTest { public static void main(String[] args) { System.out.println(Integer.class.getClassLoader()); //System.out.println(ProxyTest.class.getClassLoader().getParent().getClass().getName()); System.out.println(ProxyTest.class.getClassLoader().getClass().getName()); //test1(); //test2(); } private static void test3() { Vector v = new Vector(); class MyInvocationHandler implements InvocationHandler { Collection target = null; public Collection bind(Collection target) { this.target = target; Collection proxy1 = (Collection)Proxy.newProxyInstance( ProxyTest.class.getClassLoader(), new Class[]{Collection.class} , this); return proxy1; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("begin " + method.getName()); Object retval = method.invoke(target, args); System.out.println("end" + method.getName()); return retval; } } MyInvocationHandler handler = new MyInvocationHandler(); Collection proxy1 = handler.bind(v); System.out.println(proxy1.getClass().getName()); proxy1.add("abc"); proxy1.add("xyz"); System.out.println(proxy1.size()); } private static void test2() { Vector v = new Vector(); class MyInvocationHandler implements InvocationHandler { Collection target = null; public MyInvocationHandler(){} public MyInvocationHandler(Collection target){this.target = target;} public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("begin " + method.getName()); Object retval = method.invoke(target, args); System.out.println("end" + method.getName()); return retval; } } Collection proxy1 = (Collection)Proxy.newProxyInstance( ProxyTest.class.getClassLoader(), new Class[]{Collection.class} , new MyInvocationHandler(v)); System.out.println(proxy1.getClass().getName()); proxy1.add("abc"); proxy1.add("xyz"); System.out.println(proxy1.size()); } private static void test1() { Collection proxy = (Collection)Proxy.newProxyInstance( ProxyTest.class.getClassLoader(),//first parameter new Class[]{Collection.class} , //second parameter new InvocationHandler(){ //third parameter Vector target = new Vector(); public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub System.out.println("begin " + method.getName()); Object retval = method.invoke(target, args); System.out.println("end" + method.getName()); return retval; } } ); System.out.println(proxy.getClass().getName()); proxy.add("abc"); proxy.add("xyz"); System.out.println(proxy.size()); } } 以下是Proxy的API文档: public class Proxyextends extends Object implements Serializable Proxy provides static methods for creating dynamic proxy classes and instances, and it is also the superclass of all dynamic proxy classes created by those methods. To create a proxy for some interface Foo: InvocationHandler handler = new MyInvocationHandler(...); Class proxyClass = Proxy.getProxyClass( Foo.class.getClassLoader(), new Class[] { Foo.class }); Foo f = (Foo) proxyClass. getConstructor(new Class[] { InvocationHandler.class }). newInstance(new Object[] { handler }); or more simply: Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(), new Class[] { Foo.class }, handler);从以上的程序中在方法中定义参数的时候总是三个参数,可这三个参数有分别代表什么意思呢!?现在以我自己个人的理解,比如我是买家,我要买本书,可是现在我有事,是不是需要别人代我买呢?那带我买的人是不是一定要到卖书的地方买呢?所以着中间产生了三个实体.说白了就是一种代理机制.需要三方一起运行! 代理其实很好理解的,而且会用固定的语法格式,很快会掌握这一原理的!
Java Object-Oriented Programming Experimental Report NO:1           Experiment name:Introduction "Student " "Name " "Class " " "ID " " " " " " "Location" "Teacher " "Time " " "1.Experimental purposes and requirements " "1.1 Printing strings " "1.2 Documentation " "1.3 Identifiers " "1.4 Syntax errors " "2.Experimental equipment (environment) and requirements " "2.1 Eclipse " "2.2 Window XP " "3.Lab Exercises " "3.1 Pre-lab Exercises " "3.2 Comments " "3.3 Program Namesrimental results and data processing " "预习 " " " "3.4 Recognizing Syntax Errors and Correcting Syntax Errors " "4.Expe " " " "一 诗 " " " "二 注释 " "用//在程序头加注释,注释内容包括程序名字,你的名字及对这个程序的简" "短介绍(这个程序的作用),注意格式尽量简洁。在这个注释的开始和结束" "行用一个分隔符隔开(比如,用一行的星号做分割行)。 " " " "在每个Println前价格注释,说明输出的语言类型。尝试在每个注释之间加 " "空行(在程序内部不是输出的结果),看看添加后程序的可读性是否更好。" " " "找个注释,去掉一个/,然后重新编译程序,看会报什么错误。最后把/补回" "来。 " " " "注释//上再加注释//,看会不会发生问题,如////。 " "本题的第二小题的图中 " "5、参考一下附录F中的java代码编写规范,看你是否有违反其中的标准。列" "出两条你能想到的或者其他同学会与附录F相悖的注释规范。 " "不同单词出现在相同变量名里时要用下划线相连 " "三 程序名字 " "文件Simple.java " "只是一个输出信息的简单程序。这个程序的名称用的是Simple,但其实我们" "可以选一个其他的标识符来表示程序名,只要我们遵循一定的规则或者协议" "。标识符含有字母、数字、下划线和$,但不能以数字打头。规定,当标识 " "符用来表示类名(或者程序名)时推荐使用大写字母打头(习惯用法)。你" "不按照这个规定来写定义类名,程序也是不会报错的,但您最好按照规范来" "定义。这个要求可能有些强制,但当你的程序中出现非常多得标志符时,你" "会发现其中的益处。当然,程序名最好能直接体现这个程序的作用。 " " " "考虑下面的标识符是否合法,如合法,则选最好的一个来命名这个程序;如" "不合法指明为什么。保存Simple.java,依次修改类名为以下的名字(注意 " "文件名字也要跟着改),来验证你的结论。 " " " " " "1. simple (Why do you even have to change the name of the file in" "this case?) " "2. SimpleProgram " "3. 1Simple " "4. _Simple_ " "5. *Simple* " "6. $123_45 " "7. Simple! " " " "合理的标识符: 1 2 3 4 6 " "不合理的标识符:7(!不合理) 6($不推荐) 5(*不行) " "Java合理的标识符为数字 字母大小写 下划线 " "// ******************************************** " "// Simple.java " "// " "// Print a simple message about Java. " "// " "// ******************************************** " " " "public class Simple " "{ " " " "public static void main (String[] args) " "{ " " " "System.out.println ("Java rocks!!"); " " " "} " "} " " " "四 修改认识的语法错误 " "当程序发生语法错误时,编译器将给出错误
⼤数据java操作hive ⼤数据 ⼤数据 java操作 操作hive 版权声明: 本⽂为博主学习整理原创⽂章,如有不正之处请多多指教。 未经博主允许不得转载。 虚拟机上操作,保证 虚拟机上操作,保证hive数据库能正常连接进⼊。 数据库能正常连接进⼊。 如因退出没有⽤到命令(quit;),第⼆次进⼊则会报错。解决⽅法,切换到 [root@xcl ~]# cd apache-hive-2.1.1-bin/conf/ [root@xcl conf]# vi hive-site.xml 最后进⾏初始化命令为:schematool -initSchema -dbType mysql 在任意⽬录下输⼊hive,则ok。 创建数据库、在数据库中创建数据表,在本地 创建数据库、在数据库中创建数据表,在本地"造数据 造数据" Create databases text; 例: CREATE TABLE t4(name String ,age int,likes ARRAY<String>,relation MAP<String,String>,location struct<country:String,city:String ,doornum:int>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '^' MAP KEYS TERMINATED BY ':'; "造的数据"已经分好类 # 字段分割符是逗号 # 数组类型分隔符是^号 # map数据类型分割符是冒号 tom,18,lol^篮球^⾳乐,father:tom1^mother:lili,US^LOS^16 ⽤load上传本地数据到表中 load data local inpath '/usr/local/apps/test1.txt' into table t4; eclipse操作步骤(要配好 操作步骤(要配好maven创建 创建maven项⽬) 项⽬) maven项⽬需要的包,在 项⽬需要的包,在"pom.xml"中添加添加 <dependency> <groupId>org.apache.hive </groupId> <artifactId>hive-jdbc </artifactId> <version>2.1.1</version> </dependency> java连接 连接hive代码: 代码: //加载驱动 Class.forName("org.apache.hive.jdbc.HiveDriver"); //获取连接 String url="jdbc:hive2://192.168.1.90:10000/test"; Connection connection= DriverManager.getConnection(url,"root",""); //执⾏sql PreparedStatement ps=connection.prepareStatement("SELECT * FROM table01 "); //获取结果 ResultSet rs=ps.executeQuery(); while (rs.next()){ System.out.println("测试数据输出结果是:"+rs.getString(1)); } //关闭连接 rs.close(); ps.close(); connection.close(); 在代码中添加 注意:引的包全是sql包 引完后会报异常,抛出异常即可 如出现这个问题 解决⽅法: <dependency> <groupId>jdk.tools</groupId> <artifactId>jdk.tools</artifactId> <version>1.7</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath> </dependency>
MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门一下下,如果你看过Hibernate了那这个就非常的简单) (再加一条,其实大家可以看官方的教程更好些:http://mybatis.github.io/mybatis-3/,而且如果英文不是很好的那就看中文的:http://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html) 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个ORM 工具感兴趣。因为接下来自己的项目中很有可能采用这个ORM工具。所以在此重新温习了一下 mybatis, 因此就有了这个系列的 mybatis 教程. 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为 MyBaits 的 dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是 utf-8 编码 创建用户表,并插入一条测试数据 程序代码 程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉水沏茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值