java百问

1、java、javax、sun、org包有什么区别

Java、javax、org、sun包都是jdk提供的类包,且都是在rt.jar中。rt.jar是JAVA基础类库(java核心框架中很重要的包),包含lang在内的大部分功能,而且rt.jar默认就在根classloader的加载路径里面,所以放在classpath是多此一举 。他们之间的区别具体如下: 
了解java核心框架看这里:java核心框架是什么样的

  • java.* 
    Java SE的标准库,是java标准的一部分,是对外承诺的java开发接口,通常要保持向后兼容,一般不会轻易修改。包括其他厂家的在内,所有jdk的实现,在java.*上都是一样的。

  • javax.* 
    也是java标准的一部分,但是没有包含在标准库中,一般属于标准库的扩展。通常属于某个特定领域,不是一般性的api。 
    所以以扩展的方式提供api,以避免jdk的标准库过大。当然某些早期的javax,后来被并入到标准库中,所有也应该属于新版本JDK的标准库。比如jmx,java 5以前是以扩展方式提供,但是jdk5以后就做为标准库的一部分了,所有javax.management也是jdk5的标准库的一部分。

  • com.sun.* 
    是sun的hotspot虚拟机中java.* 和javax.*的实现类。因为包含在rt中,所以我们也可以调用。但是因为不是sun对外公开承诺的接口,所以根据根据实现的需要随时增减,因此在不同版本的hotspot中可能是不同的,而且在其他的jdk实现中是没有的,调用这些类,可能不会向后兼容,所以一般不推荐使用。

  • org.omg.* 
    是由企业或者组织提供的java类库,大部分不是sun公司提供的,同com.sun.*,不具备向后兼容性,会根据需要随时增减。其中比较常用的是w3c提供的对XML、网页、服务器的类和接口。

2: 

java中AWT和SWing的区别与联系

AWT和Swing都是java中的包。

AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。

Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。    

AWT和Swing的实现原理不同:
       AWT的图形函数与操作系统提供的图形函数有着一一对应的关系。也就是说,当我们利用 AWT构件图形用户界面的时候,实际上是在利用操作系统的图形库。
       不同的操作系统其图形库的功能可能不一样,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT不得不通过牺牲功能来实现平台无关性。因此,AWT 的图形功能是各操作系统图形功能的“交集”。
        因为AWT是依靠本地方法来实现功能的,所以AWT控件称为“重量级控件”。 

       而Swing ,不仅提供了AWT 的所有功能,还用纯粹的Java代码对AWT的功能进行了大幅度的扩充。
       例如:并不是所有的操作系统都提供了对树形控件的支持, Swing则利用了AWT中所提供的基本作图方法模拟了一个树形控件。
       由于 Swing是用纯粹的Java代码来实现的,因此Swing控件在各平台通用。
       因为Swing不使用本地方法,故Swing控件称为“轻量级控件”。 

       AWT和Swing之间的区别:
       1)AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢。
       2)AWT的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。

       在实际应用中,应该使用AWT还是Swing取决于应用程序所部署的平台类型。例如:
       1)对于一个嵌入式应用,目标平台的硬件资源往往非常有限,而应用程序的运行速度又是项目中至关重要的因素。在这种矛盾的情况下,简单而高效的AWT当然成了嵌入式Java的第一选择。
       2)在普通的基于PC或者是工作站的标准Java应用中,硬件资源对应用程序所造成的限制往往不是项目中的关键因素。所以在标准版的Java中则提倡使用Swing, 也就是通过牺牲速度来实现应用程序的功能。

reference:

http://blog.csdn.net/shuchangwen/article/details/39267823

 

3: 

接口中定义变量必须为public static final的原因

在interface里面的变量默认都是public static final 的。所以可以直接省略修饰符:

String param="ssm";//变量需要初始化

为什么接口要规定成员变量必须是public static final的呢?

答:

首先接口是一种高度抽象的"模版",,而接口中的属性也就是’模版’的成员,就应当是所有实现"模版"的实现类的共有特性,所以它是public static的 ,是所有实现类共有的 .假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?

其次,接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别? 又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。

最后,接口只是对事物的属性和行为更高层次的抽象 。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle )的一种体现。

 

4:详解spring 每个jar的作用

spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。

spring-src.zip就是所有的源代码压缩包。

除了spring.jar 文件,Spring 还包括有其它21 个独立的jar 包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar 包,而不必引入整个spring.jar 的所有类文件。

spring-core.jar
这个jar 文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
外部依赖Commons Logging, (Log4J)。

spring-beans.jar
这个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就可以了。
外部依赖spring-core,(CGLIB)。

spring-aop.jar
这个jar 文件包含在应用中使用Spring 的AOP 特性时所需的类和源码级元数据支持。使用基于AOP 的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。
外部依赖spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。

spring-context.jar
这个jar 文件为Spring 核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI 所需的全部类,instrumentation组件以及校验Validation 方面的相关类。
外部依赖spring-beans, (spring-aop)。

spring-dao.jar
这个jar 文件包含Spring DAO、Spring Transaction 进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。
外部依赖spring-core,(spring-aop, spring-context, JTA API)。

spring-jdbc.jar
这个jar 文件包含对Spring 对JDBC 数据访问进行封装的所有类。
外部依赖spring-beans,spring-dao。

spring-support.jar
这个jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),邮件服务,脚本服务(JRuby),缓存Cache(EHCache),任务计划Scheduling(uartz)方面的类。
外部依赖spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache)

spring-web.jar
这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。
外部依赖spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。

spring-webmvc.jar
这个jar 文件包含Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。当然,如果你的应用使用了独立的MVC 框架,则无需这个JAR 文件里的任何类。
外部依赖spring-web, (spring-support,Tiles,iText,POI)。

spring-portlet.jar
spring自己实现的一个类似Spring MVC的框架。包括一个MVC框架和控制器。
外部依赖spring-web, Portlet API,(spring-webmvc)。

spring-struts.jar
Struts框架支持,可以更方便更容易的集成Struts框架。
外部依赖spring-web,Struts。

spring-remoting.jar
这个jar 文件包含支持EJB、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。
外部依赖spring-aop, (spring-context,spring-web,Hessian,Burlap,JAX-RPC,EJB API)。

spring-jmx.jar
这个jar包提供了对JMX 1.0/1.2的支持类。
外部依赖spring-beans,spring-aop, JMX API。

spring-jms.jar
这个jar包提供了对JMS 1.0.2/1.1的支持类。
外部依赖spring-beans,spring-dao,JMS API。

spring-jca.jar
对JCA 1.0的支持。
外部依赖spring-beans,spring-dao, JCA API。

spring-jdo.jar
对JDO 1.0/2.0的支持。
外部依赖spring-jdbc, JDO API, (spring-web)。

spring-jpa.jar
对JPA 1.0的支持。
外部依赖spring-jdbc, JPA API, (spring-web)。

spring-hibernate2.jar
对Hibernate 2.1的支持,已经不建议使用。
外部依赖spring-jdbc,Hibernate2,(spring-web)。

spring-hibernate3.jar
对Hibernate 3.0/3.1/3.2的支持。
外部依赖spring-jdbc,Hibernate3,(spring-web)。

spring-toplink.jar
对TopLink框架的支持。
外部依赖spring-jdbc,TopLink。

spring-ibatis.jar
对iBATIS SQL Maps的支持。
外部依赖spring-jdbc,iBATIS SQL Maps。

另外的两个包。

spring-mock.jar
这个jar 文件包含Spring 一整套mock 类来辅助应用的测试。Spring 测试套件使用了其中大量mock 类,这样测试就更加简单。模拟HttpServletRequest 和HttpServletResponse 类在Web 应用单元测试是很方便的。并且提供了对JUnit的支持。
外部依赖spring-core。

spring-aspects.jar
提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中,比如Eclipse AJDT。
外部依赖。

WEAVER JARS (dist/weavers)说明。

spring-agent.jar
Spring的InstrumentationSavingAgent (为InstrumentationLoadTimeWeaver),一个设备代理包,可以参考JDK1.5的Instrumentation功能获得更多信息。
外部依赖none (for use at JVM startup: "-javaagent:spring-agent.jar")。

spring-tomcat-weaver.jar
扩展Tomcat的ClassLoader,使其可以使用instrumentation(设备)类。
外部依赖none (for deployment into Tomcat's "server/lib" directory)。

 

5:JDK中rt.jar、tools.jar和dt.jar作用

dt.jar和tools.jar位于:{Java_Home}/lib/下,而rt.jar位于:{Java_Home}/jre/lib/下,其中:

rt.jar是JAVA基础类库,也就是你在java doc里面看到的所有的类的class文件
dt.jar是关于运行环境的类库

tools.jar是工具类库,编译和运行需要的都是toos.jar里面的类分别是sun.tools.java.*; sun.tols.javac.*;

 

在Classpath设置这几个变量,是为了方便在程序中 import;Web系统都用到tool.jar。

 

1. rt.jar
    rt.jar 默认就在Root Classloader的加载路径里面的,而在Claspath配置该变量是不需要的;同时jre/lib目录下的

    其他jar:jce.jar、jsse.jar、charsets.jar、resources.jar都在Root Classloader中

2. tools.jar

    tools.jar 是系统用来编译一个类的时候用到的,即执行javac的时候用到

    javac XXX.java

    实际上就是运行

    java -Calsspath=%JAVA_HOME%\lib\tools.jar xx.xxx.Main XXX.java

    javac就是对上面命令的封装 所以tools.jar 也不用加到classpath里面

3. dt.jar
    dt.jar是关于运行环境的类库,主要是swing的包   在用到swing时最好加上。

 

5:操作MySQL数据库的sql语句是否区分大小写?

一、在windows系统中不区分大小写:

 

  "SELECT * FROM USER WHERE USERNAME='....' " 和 "select * from user where username=‘....’ "查询结果是一样的。

 

二、在Linux和Unix系统中字段名、数据库名和表名要区分大小写。

 

  假如说在你的MySQL数据库中的数据库名为“TEST”,表名为“USER”,某个字段名为“USERNAME”。

 

  则sql语句为:" select * from TSET.USER where USERNAME ='....'  "和 " SELECT * FROM TSET.USER WHERE USERNAME='....' "的结果是一样的。

 

          注意:这里所说的操作系统是指你的MySQL数据安装在哪个操作系统。

转载于:https://my.oschina.net/u/2365905/blog/1140417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值