Java中的上下文到底是啥? [复制]
Posted
技术标签:
【中文标题】Java中的上下文到底是啥? [复制]【英文标题】:What exactly is a Context in Java? [duplicate]Java中的上下文到底是什么? [复制] 【发布时间】:2011-04-24 12:03:51 【问题描述】:我在谷歌上搜索并阅读了 Java 文档,但我有点困惑。有人可以用简单的英语解释一下Context
是什么吗?
【问题讨论】:
嗯,上下文的含义可以根据...上下文而改变。 在什么情况下?说真的——(不是开玩笑) @Colin 比我有趣一秒。 你的意思是android Context吗?这与“Java 中的上下文”非常不同。 这个问题类似于“'this'是什么意思?” 【参考方案1】:在编程术语中,较大的周围部分可以对当前工作单元的行为产生任何影响。例如。使用的运行环境、环境变量、实例变量、局部变量、其他类的状态、当前环境的状态等。
在某些 API 中,您会在接口/类中看到此名称,例如Servlet 的ServletContext
、JSF 的FacesContext
、Spring 的ApplicationContext
、Android 的Context
、JNDI 的InitialContext
等等。它们都经常遵循Facade Pattern,它抽象了最终用户不需要知道的环境细节在单个接口/类中。
【讨论】:
这有什么用?你能举个Android的例子吗? “外观模式”链接指向 Wikipedia 文章,其中包含“计算机”风格的有用示例。它有帮助吗?它至少归结为它管理和控制整个设备的内部部分(CPU/HDD/RAM/GPU/等),而最终用户不必担心。对于 Android,根据链接的 Javadoc “它允许访问特定于应用程序的资源和类,以及对应用程序级操作的向上调用,例如启动活动、广播和接收意图等。” 主要的好处是您不需要全部以“低级”方式进行。上下文会处理这个问题。 CONTEXT 的含义随着上下文的变化而变化。基本上,它用于应用程序/对象的当前状态内容。它表示环境数据并提供对数据库、UI 等内容的访问【参考方案2】:上下文代表您的环境。它代表您在系统中所处的状态。
例如,在 Java 的 Web 编程中,您有一个请求和一个响应。这些被传递给 Servlet 的服务方法。
Servlet 的一个属性是 ServletConfig,其中包含一个 ServletContext。
ServletContext 用于告诉 servlet Servlet 所在的 Container。
因此,ServletContext 代表其容器内的 servlet 环境。
类似地,在 Java EE 中,您拥有 EBJContexts,元素(如会话 bean)可以访问以使用它们的容器。
这是当今 Java 中使用的两个上下文示例。
编辑 --
你提到了安卓。
看这里:http://developer.android.com/reference/android/content/Context.html
您可以看到此上下文如何为您提供有关 Android 应用部署位置和可用内容的各种信息。
【讨论】:
【参考方案3】:简单地说,Java 上下文意味着 Java native
方法全部在一起。
在接下来的 Java 代码中,两行代码需要上下文:// (1)
和 // (2)
import java.io.*;
public class Runner
public static void main(String[] args) throws IOException // (1)
File file = new File("D:/text.txt");
String text = "";
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) // (2)
text += line;
System.out.println(text);
(1) 需要上下文,因为由 Java 本地方法调用 private native void java.lang.Thread.start0();
(2) reader.readLine()
需要上下文,因为调用 Java 本地方法 public static native void java.lang.System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
PS。
这就是 BalusC 对 Pattern Facade 的更严格的说法。
【讨论】:
【参考方案4】:由于您将单词大写,我假设您指的是接口javax.naming.Context
。有几个类实现了这个接口,用最简单的描述,它(通常)是一组名称/对象对。
【讨论】:
以上是关于Java中的上下文到底是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章