java教程是什么

问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
在《JAVA核心编程》中,有一段这样的代码
import javax.swing.*;
import java.awt.*;
import java.io.F
public class ImageViewer {
public static void main(String[] args){
EventQueue.invokeLater(() -& {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
class ImageViewerFrame extends JFrame{
private JL
private JFileC
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 400;
public ImageViewerFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
label = new JLabel();
add(label);
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu();
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("open");
menu.add(openItem);
openItem.addActionListener(Event -& {
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
JMenuItem exitItem = new JMenuItem("exit");
menu.add(exitItem);
exitItem.addActionListener(Event -& System.exit(0));
可以看到两处这样的代码
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Event -& {
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
这个符号是什么意思,百度了一下,也没有查到
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
Java8的lambda表达式。就是匿名函数。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
上面那一段可以看成如下:
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
下面一段可以看成:
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int result = chooser.showOpenDialog(null);
if (result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
只不过java自动帮你翻译了一下
同步到新浪微博
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:    上个月我们麦子学院和腾讯课堂合作推出了Java EE的直播课,那么Java EE和Java有什么关系,Java EE  到底是什么,由这篇文章为你揭晓。  这篇文章主要介绍在J2EE范例中使用的缩写词和概念。J2EE(Java 2 Platform, Entreprise Edition)  代表Java企业版平台。它使得模块化的Java程序可以在服务器上部署。Java SE是一组Java核心库,Java  应用程序在其上得以执行,而J2EE是基于Java SE的。  概念综述  在我们深入J2EE之前,先看一下综述:  多层式应用(Multitier Application)——多层式应用(或者多层式架构)分成多个逻辑部分,大多在  多层服务器上实现。例如,三层应用模型:用户和浏览器,应用服务器,数据库服务器。其中应用服务  器和数据库服务器就是分别在不同的服务器上来处理应用的请求。  多层式服务(Multitier Service)——以三层架构模型的服务为例,应用服务器响应用户的请求。数据  库服务器响应应用服务器的查询求情。  Java Bean——由一些包含私有属性的Java类组成,对外提供get和set方法。从技术上讲,这些类必须保  证有一个不含参数的构造器并且实现Serializable接口。  J2EE 5的概念  Java EE应用程序模型——这个模型描述了一个实现服务的多层架构。“什么是服务”没有明确的界限。  事实上,服务只是一个逻辑上的概念,它的对应实体取决于应用实现的概念。例如,客户端/服务器模型  就是一种服务。  Java EE 服务——这是一个J2EE中三层架构的应用服务范例。它是由网页层(服务JSP页面)和事务层(  管理企业的数据层)组成的。  Java EE 组件——“组件”是指独立的软件单元,可以和其他的组件组合来建立一个应用。  Web组件(Web Component)——web端生成的页面或者对用户请求的返回。代表性的有: Java   Servlets, JavaServer Faces 和 Java Server Pages.  小程序(Applet)——一个小型的Java应用程序可以作为响应的一部分返回给用户,用户可以在他们的  浏览器上运行此程序。这种小型的程序是Javascript的竞争对手。  客户端程序(Application Client)——例如,一个用Java写的桌面应用程序。  EJB(Enterprise Java Beans)——见下文。  Java EE 客户端——这个概念中包含三个其他的概念:  网页客户端(Web Client)或小型客户端(thin client)——以前(也不是非常久以前),客户端的请  求返回的网页会包含脚本代码,这些代码会在应用服务器上执行了再将运行结果返回给客户端。这就是  EE客户端。比如,用户可以查询员工的信息,并且对不同的结果按照他们喜欢的方式排列。现在,大多  数开发者都不是在网页中使用脚本了,因为这不是个好习惯。他们更喜欢使用MVC设计原则,即禁止在网  页中使用脚本。  小程序(Applet)  应用客户端(Application Client)  Java EE 服务器通信(Java EE Server Communication)——这是指发生在小型客户端和应用客户端之  间在服务器上的通信。具有代表性的是,小型客户端和小程序在Web层通信,但是应用客户端在EJB通信  。 你觉得这不够清晰是吗?你觉得这很麻烦是吗?这就对了!这就是REST以及MVC设计原理现在在开发  中流行的缘故。  EJB (企业级Java Beans,Enterprise Java Beans)——这是一个逻辑概念,与传统的Java Beans无关。  它主要试图从多重应用的后端(也就是服务器端)来压缩事务逻辑。其中一个它试图解决的问题是确保  数据库中事务处理的完整性。警告:EJB有多个版本,并且3.0版本已经从早期的版本分离出来。  JavaBean Component——Java Bean 的同义词,主要用在JSP范例中。  Java EE容器(Java EE Container)——这是部署组装Java EE组件的地方(也就是应用程序服务器)。  它定义了Web容器(包含servlets和JSP),还定义了EJB容器(包含的企业级Java Bean)以及应用客户  端容器(运行独立的应用程序)和在浏览器上运行的小程序容器。  部署描述符(Deployment Descriptor )——这是一个为打包好的应用提供部署信息的XML文件,点击查  看更多信息。  SOAP(简单对象访问协议,Simple Object Access Protocol)——这是一个通过网络提供的服务传输信息  的协议。信息是通过XML构建的,能够通过多个传输交换层,多数情况下是HTTP。SOAP是JSON和REST-  like服务的竞争对手。  WSLD(网络服务描述语言,Web Service Description Language)——它用XML文件来描述了网络服务(  名字,地点,通信模式)。  UDDI(通用描述、发现与集成服务,Universal Description, Discovery and Integration)——一种  ebXML规范,可以在线发布有关产品和服务的信息。  Java Servlet——是用Java写的一个服务器端小程序,可以处理用户的HTTP请求,返回结果。  JSP (JavaServer Page)——一种基于HTML文件(就是一个模板)处理之后能够生成静态内容。可以包含  脚本代码的片段,以在最终生成的脚本静态文件中生成。  JSTL (JSP标准标签库,JavaServer Page Standard Tag Library)——一组可以模仿脚本代码功能的用  在JSP的标准标签。例如,遍历客户端并显示他们对应的信息。现在,在JSP中,这样的标签已经已经取  代了脚本代码。一般用于生成需要填充信息的页面。  JSF (Java Server Face)——包含JSF标签(类似于LSTL标签)的JSP页面。此外,JSF允许在页面中定义  导航模块(类似于Spring web flow),包括Facelets。  Facelets——Facelets是JSF的MVC视图部分。它的主要功能是利用提供的数据(例如客户端列表)将模  板转换成HTML文件。它也可以将生成的文件(例如HTML主体)提取出来一部分并到另一个模板中,相当  于Sitemesh。  The Java API for XML-based Web Services (Java中用来创建基于XML的Web的API,JAX-WS)——对于使  用XML通信的Web服务来说至关重要。  The Java API for XML Binding (序列化为XML的API,JAXB)——一种可以在JavaBeans和XML文件之间相  互转化的方式点击查看更多信息。  JTA (Java事务处理API,Java Transaction API) ——划清数据库中上行和下行的通信界限。  JMS(Java信息服务,Java Message Service)——这个API保证服务器和应用在网络上的通信可靠、异  步。ActiveMQ实现了JMS。  JavaMail API——提供通过应用程序发送邮件方式。  JAXP(加工XML文件的API,Java API for XML Processing)——提供了处理XML文件的方式。  JAXR(提供XML注册的API,Java API for XML Registries)——一个可以注册包含了元数据的XML的API  。  JDBC(Java数据库连接,Java Database Connectivity)——这个API可以使应用程序直接通过SQL通信  来访问数据库。  JCA(J2EE连接器架构,Java EE Connector Architecture)——使应用程序能和信息系统(通常是数据  库)通信。点击查看更多  JPA(Java持久化API,Java Persistence API)——这是一个在数据库中存储对象的ORM(对象关系表,  Object/relational mapping)定义。点击查看范例  JNDI(Java命名和目录接口)——一种能存储和检索资源或者通过名字查找信息的方式,点击查看更多  JAAS(Java鉴别与授权服务,Java Authentication and Authorization Service)——识别并控制服务  权限的一张方式。  J2EE 6的概念  在J2EE6中,大量的配置可以在源代码中执行。  JAX-RS——定义REST(含状态传输)之类的服务的API。  Managed Beans——一个可以执行嵌入代码的Java对象。在Sping框架中,这是一些添加了@Autowired注  释的对象。  CDI(上下文和依赖注入,Contexts and Dependency Injection for Java EE)——CDI是Java EE整个  下一代类型安全的依赖注入的事实上的API。在Sping框架中,应用程序可以设计应用的上下文,控制反  转(IoC)和依赖注入功能(DI)。  Bean确认——通过设定好的规则判断Java Beans的状态是有效的。  JACC(Java Authorization Contract for Containers)——在J2EE应用服务器和特定的授权认证服务  器之间定义的一个连接的协约。  JASPIC(Java认证服务提供者接口,Java Authentication Service Provider Interface)——这是与  JACC互补认证的SPI(也就是服务API,Service API)。它定义了应用程序如何通过传统的认证服务。  总体上说,J2EE和Spring框架慢慢的朝着一个相同的方向发展。  转载自麦子学院(/course/java/)
楼主发言:1次 发图:0张 | 更多
  Java分为三个体系,分别为:  Java SE(J2SE,Java2 Platform Standard Edition,标准版),  JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版),  Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
  javaee 是java平台的一种版本.  Java 平台有三个版本,java SE, java EE, java ME.  Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。  扣丁学堂上有Java相关的视频讲解得不错,千锋出品的。
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)登录以解锁更多InfoQ新功能
获取更新并接收通知
给您喜爱的内容点赞
关注您喜爱的编辑与同行
966,690 八月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
模块化Java简介
模块化Java简介
Alex Blewitt
2&他的粉丝
0&他的粉丝
日. 估计阅读时间:
硅谷人工智能、机器学习、互联网金融、未来移动技术架构 ,
相关厂商内容
相关赞助商
类库毫无疑问也是模块。对于类库来讲,可能没有一个单一接口与之通信,但往往却有&& API(可能被用到)和&& package(文档中说明了其用途)。此外,它们也有自己依赖的类库(比如或)。这将引起自动依赖管理器引入许多并非必须的类库:以为例,引入了超过10个依赖类库(包括javax.mail和javax.jms),尽管这些类库中有不少对于使用Log4J的程序来说根本不需要。
某些情况下,一个模块的依赖可以是可选的;换句话说,该模块可能有一个功能子集缺少依赖。在上面的例子中,如果JMS没有出现在运行时 classpath中,那么通过JMS记录日志的功能将不可用,但是其他功能还是可以使用的。(Java通过使用延迟链接&&deferred linking来达到这一目的:直到要访问一个类时才需要其出现,缺少的依赖可以通过ClassNotFoundException来处理。其他一些平台的概念也是做类似的运行时检查。)
通常,模块都附带一个版本号。许多开源项目生成的发行版都是以类似log4j-1.2.15.jar的方式命名的。这样开发者就可以在运行时通过手动方式来检测特定开源类库的版本。可是,程序编译的时候可能使用了另一个不同版本的类库:假定编译时用log4j-1.2.3.jar而运行时用log4j-1.2.15.jar,程序在行为上依然能够保持兼容。即使升级到下一个小版本,仍然是兼容的(这就是为什么log4j 1.3 的问题会导致一个产生,以表示兼容性被打破)。所有这些都是基于惯例而非运行时已知约束。
模块化何时能派上用场?
作为一般概念,模块化有助于将应用分解为不同的部件,各个部件可以单独测试(和开发)。正如上面所提到的,大多数类库都是模块。那么,对于那些生产类库提 供给别人使用的人来说,模块化是一个非常重要的概念。通常,依赖信息是在构建工具(maven pom 或 ivy-module)里进行编码并被明确记录在类库使用文档中的。另外,高层类库开发过程中需要修改较低层级类库bug,以提供更好支持的情况并不少 见,即便低层类库的最新版本已经对bug进行了修正。(可是有时候这种情况。)
如果一个类库是提供给他人使用的,那么它就已经是一个模块了。但是世上鲜有&Hello World&这样的类库,也鲜有&Hello World&这样的模块。只有当应用足够大时(或者是用一个模块化构建系统进行构建时),把应用划分为不同部件的概念就派上用场了。
模块化的好处之一是便于测试。一个小模块(具有定义良好的API)通常比应用整体更好测试。在GUI应用中尤其如此,GUI自身可能不好测试,但是其调用的代码却是可测试的。
模块化的另一个好处是便于进化。尽管系统整体有一个版本号,但实际上,其下有多个模块及相应版本(不论开源与否,总有一些类库&&甚至是Java版本&& 是系统所依赖的)。这样,每个模块都可以自己的方式自由地进化。某些模块进化得快些,另一些则会长期保持稳定(例如,Eclipse 3.5 的org.eclipse.core.boot从2008年2月以来一直没有改变过)。
模块化也可给项目管理带来方便。如果一个模块公布的API可供其他模块预先使用,那么各个模块就可以由不同的团队分别开发。这在大型项目中必定会发生,各个项目子团队可以负责不同模块的交付。
最后,将一个应用程序模块化,可以帮助识别正在使用依赖类库的哪个版本,以便协调大型项目中的类库依赖。
运行时与编译时
无论在编译时还是运行时,Java的classpath都是扁平的。换句话说,应用程序可以看到classpath上的所有类,而不管其顺序如何(如果没 有重复,是这样;否则,总是找最前面的)。这就使Java动态链接成为可能:一个处于classpath前面的已装载类,不需要解析其所引用的可能处于 classpath后面的那些类,直到确实需要他们为止。
如果所使用的接口实现到运行时才能清楚,通常使用这种方法。例如,一个SQL工具可以依赖普通JDBC包来编译,而运行时(可以有附加配置信息)可以实例化适当的JDBC驱动。这通常是在运行时将类名(实现了预定义的工厂接口或抽象类)提供给Class.forName查找来实现。如果指定的类不存在(或者由于其他原因不能加载),则会产生一个错误。
因此,模块的编译时classpath可能会与运行时classpath有些微妙的差别。此外,每个模块通常都是独立编译的(模块A可能是用模块C 1.1 来编译的,而模块B则可能是用模块C 1.2 来编译的),而另一方面,在运行时则是使用单一的路径(在本例中,即可能是模块C的1.1版本,也可能是1.2版本)。这就会导致依赖地狱(),特别当它是这些依赖传递的末尾时更是这样。不过,像和这样的构建系统可以让模块化特性对开发者是可见的,甚至对最终用户也是可见的。
Java有一个非常好的底层特性,叫做, 它可以让运行时路径分得更开。通常情况下,所有类都是由系统ClassLoader装载的;可是有些系统使用不同的ClassLoader将其运行时空间 进行了划分。Tomacat(或者其他Servlet引擎)就是一个很好的例子,每个Web应用都有一个ClassLoader。这样Web应用就不必去 管(无论有意与否)在同一JVM中其他Web应用所定义的类。
这种方式下,每个Web应用都用自己的ClassLoader装载类,这样一个(本地)Web应用实现装载的类不会与其他Web应用实现相冲突。但这就要 求对任何ClassLoader链,类空间都是一致的;这意味着在同一时刻,你的VM可以同时从两个不同的Classloader中各自装载一个Util.class, 只要这两个ClassLoader互相不可见。(这也是为什么Servlet引擎具有无需重启即可重新部署的能力;扔掉了一个ClassLoader,你 也就扔掉了其引用类,让老版本符合垃圾回收的条件&&然后让Servlet引擎创建一个新的ClassLoader并在运行时中重新部署应用类的新版本。)
构建一个模块化系统实际上是把系统划分成(有可能)可重用模块的过程,并使模块间耦合最小化。同时,其也是一个减少模块需求耦合的过程:例如,Eclipse IDE许多plugin对GUI和非GUI组件(如jdt.ui和jdt.core)的依赖是分开的,这样就可以在IDE环境之外使用这些非GUI模块(headless builds、分析及错误检查等等)。
除了作为整体的rt.jar之外,任何其他系统都可以被分解为不同的模块。问题是这么做是否值得?毕竟,从头构建一个模块化系统比起把一个单模块系统分割成多个模块要容易得多。
之所以这样,原因之一是跨越模块边界的类泄漏。例如,java.beans包逻辑上不应该依赖于任何GUI代码;可是所使用的引用了,这必然导致对整个AWT的依赖。因此从技术上讲java.beans有依赖于AWT的选项,尽管常识告诉我们不应该有。如果核心java类库从一开始就采用了模块化方法来构建,那么这种错误早在API公布之前就发现了。
有些情况下,一个模块看上去不能再被划分成子模块了。可是,有时候相关功能保持在同一个模块中是为了便于组织,当需要的时候还可以再进一步分解。例如,对重构的支持起初是Eclipse JDT的一部分,现在被抽出为一个模块,以便其他语言(如CDT)利用其重构能力。
许多系统都是通过plugin概念进行扩展的。在这种情况下,宿主系统定义了一套plugin必须遵循的API及plugin注入方式。许多应用(如Web浏览器、IDE及构建工具)通常都是通过提供带有适当API的插件来对应用进行定制的。
有时候这些plugin受到限制或只有一些普通操作(音频或视频解码),但是组织起来效果也非常不错(例如,IDE的众多plugin)。有时候,这些 plugin可以提供自己的plugin,以便进一步定制行为,使得系统具有更高可定制性。(可是,增加这些中间层级会使系统难以理解。)
这种plugin API成为各个plugin必须遵守的契约的一部分。这些plugin自己也是模块,也面临依赖链和版本问题。由于(特定)plugin API演化的复杂性,因此plugin自己也面临这一问题(必须维持向后兼容性)。
成功的原因之一是其简单性:只需实现少量的函数。只要宿主浏览器用适当的MIME类型将输入重定向,plugin就可以处理其他事情。可是,更复杂的应用(如IDE)通常需要更紧密集成各个模块,因此需要一个更复杂的API来推动。
Java模块化的当前状态
目前,Java领域存在许多模块化系统和plugin体系。IDE是名气最大的,IntelliJ、NetBeans和Eclipse都提供了其自己的 plugin系统作为其定制途径。而且,构建系统(Ant、Maven)甚至终端用户应用(Lotus Notes、Mac AppleScript应用)都有能够扩展应用或系统核心功能的概念。
是Java领域里无可辩驳的最成熟的模块系统,它与Java几乎是如影相随,最早出现于,但是最新规范是。 OSGi在JAR的MANIFEST.MF文件中定义了额外的元数据,用来指明每个包所要求的依赖。这就让模块能够(在运行时)检查其依赖是否满足要求, 另外,可以让每个模块有自己的私有 classpath(因为每个模块都有一个ClassLoader)。这可以让dependency hell尽早被发现,但是不能完全避免。和JDBC一样,OSGi也是规范(目前是),有多个开源(及商业)实现。因为模块不需要依赖任何OSGi的特定代码,许多开源类库现在都将其元信息嵌入到manifest中,以便OSGi运行时使用。有些程序包没有这么做,也可以用这样的工具,它可以处理一个已有的JAR文件并为其产生合适的默认元信息。自2004年之后,许多其他专有内核系统(JBoss、WebSphere、Weblogic)也都随之将其运行时转向基于OSGi内核。
最近创建的是为了模块化JDK自身。尽管其是JDK内部的一部分,并且很可能在其他SE 7 实现中不被支持,但是在该JDK之外使用Jigsaw并无限制。尽管仍在开发当中,Jigsaw还很可能成为前面提到的的参考实现。最低要求SE 7(加上目前还的事实)说明了Jigsaw仍在开发中,而且运行在Java 6或更低版本上的系统基本上是用不上了。
为了鼓励采用标准模块化格式,JSR 294专家组目前正在讨论提议:在这一提议中,Java类库(来自Maven库及Apache.org)的开发者能够提供让Jigsaw和OSGi系统都能使用的元信息。结合对Java语言的微小变动(最值得关注的是增加的module关键字),这一信息可以在编译时由高级编译器产生。运行时系统(如Jigsaw或OSGi)可以使用这些信息来校验所安装的模块及其依赖。
本文讨论了模块化的一般概念,以及在Java系统中是如何实现的。由于编译时和运行时路径可能不同,有可能会产生不一致的类库需求,从而导致依赖地狱。然 而,plugin API允许装载多种代码,但其必须遵循宿主的依赖处理规则,这又增加了发生不一致的可能性。为了防止这种情况出现,像OSGi这样的运行时模块化系统可以 在决定应用是否能被正确启动之前就校验各项要求,而不是在运行时不知不觉发生错误。
最后,有人在正在进行中的JSR 294的邮件列表中提出,要为Java语言创建一个模块系统,其可以完全在Java语言规范中被定义,以便Java开发者可以产生带有编码依赖信息的标定过版本的模块,该模块以后可以用于任何模块系统。
查看英文原文:。
感谢对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家加入到中与我们的编辑和其他读者朋友交流。
Author Contacted
语言 & 开发
23 他的粉丝
架构 & 设计
149 他的粉丝
0 他的粉丝
0 他的粉丝
开放源代码
0 他的粉丝
0 他的粉丝
0 他的粉丝
0 他的粉丝
0 他的粉丝
0 他的粉丝
356 他的粉丝
0 他的粉丝
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
写得精彩,翻译得出彩
模块化产品推荐
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。}

我要回帖

更多关于 转行学java后悔了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信