Java 和 javascript与java区别 是什么关系?

JavaScript与Java的区别 - 起飞网
关于java和javascript的关系,我曾在一个论坛上看过这样一句话,java和javascript的关系,就好比雷锋和雷峰塔的关系,实在是经典!
因为名字的关系,总是有人误以为Javascript是Java的一个子集,或者必然会存在一些关系。但非常让大家失望,这两种编程语言除了名字开头相同之外,没有其它内在的关系!
什么是Javascript?
我在上一篇中已经介绍了什么是Javascript,它是运行在浏览器中的一种脚本语言,在web页面中,Javascript可谓是无所不能:
可以操作HTML,提供了一种运行时改变HTML的工具
可以附加并执行事件,符合面向事件编程的思想
数据验证功能,在提交表单时对表单数据进行合法性验证
对客户浏览器的操作,前进、后退、刷新、跳转、打开新窗口、打印等
可以创建并使用Cookies
什么是Java呢?
Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C++类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做&Applet&(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行&Applet&。
Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。 Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。Java摈弃了C++中各种弊大于利的功能和许多很少用到的功能。 Jave可以运行与任何微处理器,用Java开发的程序可以在网络上传输,并运行于任何客户机上。
Javascript名字的由来
JavaScript最早是被称为Mocha(魔卡)的,这是这个项目的代码名。这个名字一直用到Netscape2.0 beta 2发布之前(95.11.04)&&包括在beta 1中弹出的错误框上,还可以看到Mocha的名字。不过,早在此前的9月18号,netscape就已经发布消息将在LiveWire中启用一种服务器端脚本(未提及名称)。又因为我们前面提到的&前后端通用脚本&的设计,该语言在beta 2发布时就使用了内部名称LiveScript。
但同样混乱的事情是,事实上这时Netscape已经决定将该语言命名为&JavaScript&。因此在beta 2的发布备忘中该语言称为JavaScript,而界面上却从Mocha改为了LiveScript。这一局面一直持续到12月4日,netscape与sun共同发布声明,正式启用了JavaScript这个名字。随后beta 4发布(95.12.20),界面和文档上就统一了。
所以事实上&LiveScript&这个名字可以考证的生命周期,也就只有一个月的时间(在95.11.04- 12.04)。但Mocha毕竟只是项目代码名,而非产品名,所以后来人们追溯JavaScript的历史,大多只提到LiveScript为止。
Javascript和Java的区别
一、javascript与Java是由不同的公司开发的不同产品。javascript是Netscape公司的产品,其目的是为了扩展Netscape Navigator功能,而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言;而Java是SUN Microsystems公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发。实际上,javascript最初的名字并不是javascript,而是LiveScript,名字中的&Java&是经过SUN Microsystems公司授权的。
二、javascript是基于对象的,它是一种脚本语言,是一种基于对象和事件驱动的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。而Java是面向对象的,即Java是一种真正的面向对象的语言,即使是开发简单的程序也必须设计对象。&&&
三、javascript与Java嵌入方式不一样。在HTML文档中,两种编程语言的标识不同,javascript使用&script&&/script&来标识,而Java使用Applet来标识。&&&
四、javascript与Java在浏览器中所执行的方式不一样。javascript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户,即javascript语句本身随Web页面一起下载下来,由浏览器解释执行。而Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码。&&&
五、javascript与Java代码格式不一样。javascript的代码是一种谋咀址格式,可以直接嵌入HTML文档中,并且可动态装载,编写HTML文档就像编辑文本文件一样方便,其独立文件的格式为*.js。Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中,其独立文件的格式为*.class。&&&
六、javascript与Java所采取的变量是不一样的。javascript中的变量声明采用弱类型,即变量在使用前不需作声明,而是解释器在运行时检查其数据类型。Java采用强类型变量检查,即所有变量在编译之前必须作声明。&&&
七、javascript采用动态联编,即javascript的对象引用在运行时进行检查。Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。&&&
八、javascript不直接对文本和图形进行操作,它在Web页面中与HTML元素组合一起发挥作用,但它可以控制浏览器,让浏览器直接对文本和图形进行处理。而Java则可以直接对文本和图形进行操作。查看: 3153|回复: 1
JavaScript与Java的区别
该用户从未签到
在各种网页制作技术论坛中,常常有人询问JavaScript与Java有什么区别,甚至有人误认为JavaScript就是Java。JavaScript与Java确实有一定的联系,但它们并不像我们想象的那样联系紧密,甚至可以肯定地说它们有很大的区别。
  JavaScript与Java的区别主要表现在以下方面:
  一、JavaScript与Java是由不同的公司开发的不同产品。JavaScript是Netscape公司的产品,其目的是为了扩展Netscape Navigator功能,而开发的一种可以嵌入Web页面中的基于对象和事件驱动的解释性语言;而Java是SUN Microsystems公司推出的新一代面向对象的程序设计语言,特别适合于Internet应用程序开发。实际上,JavaScript最初的名字并不是Javascript,而是LiveScript,名字中的“Java”是经过SUN Microsystems公司授权的。
  二、JavaScript是基于对象的,它是一种脚本语言,是一种基于对象和事件驱动的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。而Java是面向对象的,即Java是一种真正的面向对象的语言,即使是开发简单的程序也必须设计对象。
  三、JavaScript与Java嵌入方式不一样。在HTML文档中,两种编程语言的标识不同,JavaScript使用……来标识,而Java使用来标识。
  四、JavaScript与Java在浏览器中所执行的方式不一样。JavaScript是一种解释性编程语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户,即JavaScript语句本身随Web页面一起下载下来,由浏览器解释执行。而Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码。
  五、JavaScript与Java代码格式不一样。JavaScript的代码是一种文本字符格式,可以直接嵌入HTML文档中,并且可动态装载,编写HTML文档就像编辑文本文件一样方便,其独立文件的格式为*.js。Java是一种与HTML无关的格式,必须通过像HTML中引用外媒体那么进行装载,其代码以字节代码的形式保存在独立的文档中,其独立文件的格式为*.class。
  六、JavaScript与Java所采取的变量是不一样的。JavaScript中的变量声明采用弱类型,即变量在使用前不需作声明,而是解释器在运行时检查其数据类型。Java采用强类型变量检查,即所有变量在编译之前必须作声明。
  七、JavaScript采用动态联编,即JavaScript的对象引用在运行时进行检查。Java采用静态联编,即Java的对象引用必须在编译时的进行,以使编译器能够实现强类型检查。
  八、JavaScript不直接对文本和图形进行操作,它在Web页面中与HTML元素组合一起发挥作用,但它可以控制浏览器,让浏览器直接对文本和图形进行处理。而Java则可以直接对文本和图形进行操作。
  综上所述,我们可以发现,JavaScript与Java虽然都可以应用于网页设计,但它们的确有太大的区别,根本就是两种语言。而其实现在随着javascript的流行,各大浏览器厂商都对javascript做出了较好的支持,甚至可以通过node.js使用javascript在服务器端编程。
TA的每日心情开心 21:32签到天数: 1 天[LV.1]初来乍到
感谢分享。
Powered byAndroid中Java和JavaScript交互
发表于 日 21:37 | Hits: 8175
Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。
实现Java和js交互十分便捷。通常只需要以下几步。
WebView开启JavaScript脚本执行
WebView设置供JavaScript调用的交互接口。
客户端和网页端编写调用对方的代码。
为了便于讲解,先贴出全部代码
lineos:false1
package com.example.j
import android.annotation.SuppressL
import android.app.A
import android.os.B
import android.util.L
import android.view.M
import android.webkit.JavascriptI
import android.webkit.WebChromeC
import android.webkit.WebS
import android.webkit.WebV
import android.webkit.WebViewC
import android.widget.T
public class MainActivity extends Activity {
private static final String LOGTAG = &MainActivity&;
@SuppressLint(&JavascriptInterface&)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final WebView myWebView = (WebView) findViewById(R.id.myWebView);
WebSettings settings = myWebView.getSettings();
settings.setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new JsInteration(), &control&);
myWebView.setWebChromeClient(new WebChromeClient() {});
myWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
testMethod(myWebView);
myWebView.loadUrl(&file:///android_asset/js_java_interaction.html&);
private void testMethod(WebView webView) {
String call = &javascript:sayHello()&;
call = &javascript:alertMessage(\&& + &content& + &\&)&;
call = &javascript:toastMessage(\&& + &content& + &\&)&;
call = &javascript:sumToJava(1,2)&;
webView.loadUrl(call);
public class JsInteration {
@JavascriptInterface
public void toastMessage(String message) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
@JavascriptInterface
public void onSumResult(int result) {
Log.i(LOGTAG, &onSumResult result=& + result);
前端网页代码
lineos:false js_java_interaction.html1
&script type=&text/javascript&&
function sayHello() {
alert(&Hello&)
function alertMessage(message) {
alert(message)
function toastMessage(message) {
window.control.toastMessage(message)
function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
Java-Javascript Interaction In Android
js调用Java
调用格式为window.jsInterfaceName.methodName(parameterValues)
此例中我们使用的是control作为注入接口名称。
lineos:false1
function toastMessage(message) {
window.control.toastMessage(message)
function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
Java调用JS
webView调用js的基本格式为webView.loadUrl(“javascript:methodName(parameterValues)”)
调用js无参无返回值函数
lineos:false1
String call = &javascript:sayHello()&;
webView.loadUrl(call);
调用js有参无返回值函数
注意对于字符串作为参数值需要进行转义双引号。
lineos:false1
String call = &javascript:alertMessage(\&& + &content& + &\&)&;
webView.loadUrl(call);
调用js有参数有返回值的函数
Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。
1.Java调用js代码lineos:false1
String call = &javascript:sumToJava(1,2)&;
webView.loadUrl(call);
2.js函数处理,并将结果通过调用java方法返回lineos:false1
function sumToJava(number1, number2){
window.control.onSumResult(number1 + number2)
3.Java在回调方法中获取js函数返回值lineos:false1
@JavascriptInterface
public void onSumResult(int result) {
Log.i(LOGTAG, &onSumResult result=& + result);
Android 4.4之后使用evaluateJavascript即可。这里展示一个简单的交互示例
具有返回值的js方法
lineos:false1
function getGreetings() {
java代码时用evaluateJavascript方法调用
lineos:false1
private void testEvaluateJavascript(WebView webView) {
webView.evaluateJavascript(&getGreetings()&, new ValueCallback&String&() {
public void onReceiveValue(String value) {
Log.i(LOGTAG, &onReceiveValue value=& + value);
lineos:false1
I/MainActivity( 1432): onReceiveValue value=1
上面限定了结果返回结果为String,对于简单的类型会尝试转换成字符串返回,对于复杂的数据类型,建议以字符串形式的json返回。
evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。
Alert无法弹出
你应该是没有设置WebChromeClient,按照以下代码设置
myWebView.setWebChromeClient(new WebChromeClient() {});
Uncaught ReferenceError: functionName is not defined
问题出现原因,网页的js代码没有加载完成
,就调用了js方法。解决方法是在网页加载完成之后调用js方法
fileos:false1
myWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//在这里执行你想调用的js函数
Uncaught TypeError: Object [object Object] has no method
安全限制问题
如果只在4.2版本以上的机器出问题,那么就是系统处于安全限制的问题了。Android文档这样说的
Caution: If you’ve set your targetSdkVersion to 17 or higher, you must add the @JavascriptInterface annotation to any method that you want available your web page code (the method must also be public). If you do not provide the annotation, then the method will not accessible by your web page when running on Android 4.2 or higher.
中文大意为
警告:如果你的程序目标平台是17或者是更高,你必须要在暴露给网页可调用的方法(这个方法必须是公开的)加上@JavascriptInterface注释。如果你不这样做的话,在4.2以以后的平台上,网页无法访问到你的方法。
两种解决方法将targetSdkVersion设置成17或更高,引入@JavascriptInterface注释
自己创建一个注释接口名字为@JavascriptInterface,然后将其引入。注意这个接口不能混淆。
注,创建@JavascriptInterface代码
lineos:false1
public @interface JavascriptInterface {
代码混淆问题
如果在没有混淆的版本运行正常,在混淆后的版本的代码运行错误,并提示Uncaught TypeError: Object [object Object] has no method,那就是你没有做混淆例外处理。
在混淆文件加入类似这样的代码
lineos:false1
-keep class com.example.javajsinteractiondemo$JsInteration {
All WebView methods must be called on the same thread
过滤日志曾发现过这个问题。
lineos:false1
E/StrictMode( 1546): java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {} called on Looper (JavaBridge, tid 121) {52b6678c}, FYI main Looper is Looper (main, tid 1) {})
E/StrictMode( 1546):
at android.webkit.WebView.checkThread(WebView.java:2063)
E/StrictMode( 1546):
at android.webkit.WebView.loadUrl(WebView.java:794)
E/StrictMode( 1546):
at com.xxx.xxxx.xxxx.xxxx.xxxxxxx$JavaScriptInterface.onCanGoBackResult(xxxx.java:96)
E/StrictMode( 1546):
at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
E/StrictMode( 1546):
at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
E/StrictMode( 1546):
at android.os.Handler.dispatchMessage(Handler.java:102)
E/StrictMode( 1546):
at android.os.Looper.loop(Looper.java:136)
E/StrictMode( 1546):
at android.os.HandlerThread.run(HandlerThread.java:61)
在js调用后的Java回调线程并不是主线程。如打印日志可验证
lineos:false1
ThreadInfo=Thread[WebViewCoreThread,5,main]
解决上述的异常,将webview操作放在主线程中即可。
webView.post(new Runnable() {
public void run() {
webView.loadUrl(YOUR_URL).
评价列表(0)

我要回帖

更多关于 javascript与java区别 的文章

 

随机推荐