赞
踩
Java跨平台原理(字节码文件、虚拟机)
语言层次的安全性主要体现在:
底层的安全性可以从以下方面来说明
Java在字节码的传输过程中使用了公开密钥加密机制(PKC)。
在运行环境提供了四级安全性保障机制:
字节码校验器 -类装载器 -运行时内存布局 -文件访问限制
Java2平台包括标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本:
Standard Edition(标准版) J2SE 包含那些构成Java语言核心的类。
比如:数据库连接、接口定义、输入/输出、网络编程
Enterprise Edition(企业版) J2EE 包含J2SE 中的类,并且还包含用于开发企业级应用的类。
比如:EJB、servlet、JSP、XML、事务控制
Micro Edition(微缩版) J2ME 包含J2SE中一部分类,用于消费类电子产品的软件开发。
比如:呼机、智能卡、手机、PDA、机顶盒
他们的范围是:J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类
应用场合,API的覆盖范围各不相同。
在安装好JDK并配置好path、classpath后开发运行步骤如下:
1、可以用任何文本编辑器创建并编辑Java源程序,Java源程序用“.java”作为文件扩展名
2、编译Java源程序编译器,使用命令“javac”编译“java源程序文件名**.java”。最后编译成Java虚拟机能够明白的指令集合,且以字节码的形式保存在文件中。通常,字节码文件以“*.class”作为扩展名。***
3、执行java程序,使用“java”命令运行class(字节码)文件“java文件名”,Java解释器会读取字节码,取出指令并且翻译成计算机能执行的机器码,完成运行过程。
具体配置步骤如下:
0)找到自己的jdk安装路径,如:C:\Java\jdk1.7.0_60\bin
1)右击桌面“我的电脑”,选择“属性”
2)选中“高级系统设置”–>高级–>环境变量设置
3)在系统变量中找到“path”并选中,点击“编辑”,
4)变量值栏按键盘“home”键,输入英文的“;”
5)将第0)步准备的路径复制过来就行。点一些列“确定”完成配置
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选jre路径就ok了。
4、JDK,JRE,JVM三者关系概括如下:
jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。JRE是JAVA程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
共有单行注释、多行注释、文档注释3种注释类型。使用如下:
/*System.out.println(“a”);
System.out.println(“b”);
System.out.println(“c”);*/
/**
* 子类 Dog
* @author Administrator
*/
public *class Dog **extends Animal{}***
8种基本数据类型及其字节数
数据类型 | 关键字 | 字节数 | |
---|---|---|---|
数值型 | 整数型 | byte | 1 |
short | 2 | ||
int | 4 | ||
long | 8 | ||
浮点型 | float | 4 | |
double | 8 | ||
布尔型 | boolean | 1**(位)** | |
字符型 | char | 2 |
共同点:
1、i++和++i都是变量自增1,都等价于i=i+1
2、如果i++,++i是一条单独的语句,两者没有任何区别
3、i++和++i的使用仅仅针对变量。 5++和++5会报错,因为5不是变量。
不同点:
如果i++,++i不是一条单独的语句,他们就有区别
i++ :先运算后增1。如:
int x=5;
int y=x++;
System.out.println("x="+x+", y="+y);
//以上代码运行后输出结果为:x=6, y=5
++i : 先增1后运算。如:
int x=5;
int y=++x;
System.out.println("x="+x+", y="+y);
//以上代码运行后输出结果为:x=6, y=6
&和&&的联系(共同点):
&和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定。
操作数1&操作数2,操作数1&&操作数2, 表达式1&表达式2,表达式1&&表达式2,
情况1:当上述的操作数是boolean类型变量时,&和&&都可以用作逻辑与运算符。
情况2:当上述的表达式结果是boolean类型变量时,&和&&都可以用作逻辑与运算符。
表示逻辑与(and),当运算符两边的表达式的结果或操作数都为true时,整个运算结果才为true,否则,只要有一方为false,结果都为false。
&和&&的区别(不同点):
(1)、&逻辑运算符称为逻辑与运算符,&&逻辑运算符称为短路与运算符,也可叫逻辑与运算符。
对于&:无论任何情况,&两边的操作数或表达式都会参与计算。
对于&&:当&&左边的操作数为false或左边表达式结果为false时,&&右边的操作数或表达式将不参与计算,此时最终结果都为false。
综上所述,如果逻辑与运算的第一个操作数是false或第一个表达式的结果为false时,对于第二个操作数或表达式是否进行运算,对最终的结果没有影响,结果肯定是false。推介平时多使用&&,因为它效率更高些。
|和||的区别和联系与&和&&的区别和联系类似
使用位运算来实现效率最高。位运算符是对操作数以二进制比特位为单位进行操作和运算,操作数和结果都是整型数。对于位运算符“<<”, 是将一个数左移n位,就相当于乘以了2的n次方,那么,一个数乘以8只要将其左移3位即可,位运算cpu直接支持的,效率最高。所以,2乘以8等于几的最效率的方法是2 << 3。
基本类型转换分为自动转换和强制转换。
自动转换规则:容量小的数据类型可以自动转换成容量大的数据类型,也可以说低级自动向高级转换。这儿的容量指的不是字节数,而是指类型表述的范围。
强制转换规则:高级变为低级需要强制转换。
如何转换:
(1)、赋值运算符“=”右边的转换,先自动转换成表达式中级别最高的数据类型,再进行运算。
(2)、赋值运算符“=”两侧的转换,若左边级别>右边级别,会自动转换;若左边级别 == 右边级别,不用转换;若左边级别 < 右边级别,需强制转换。
(3)、可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强制类型转换,前提是不超出其表述范围,否则必须进行强制转换。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构、分支结构和循环结构
相同之处:都是分支语句,多超过一种的情况进行判断处理。
不同之处:
while先判断后执行,第一次判断为false,循环体一次都不执行
do while先执行 后判断,最少执行1次。
如果while循环第一次判断为true, 则两种循环没有区别。
break: 结束当前循环并退出当前循环体。
break还可以退出switch语句
continue: 循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for循环还会i++)。continue只是结束本次循环。
请使用递归算法计算n!
public class Test { public int factorial(int n) { if (n == 1 || n == 0){ return n; }else{ return n * factorial(n - 1); } } public static void main(String[] args) { Test test = new Test(); System.out.println(test.factorial(6)); } }
递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
冒泡排序算法 public class TestBubbleSort { public static void sort(int[] a) { int temp = 0; // 外层循环,它决定一共走几趟 for (int i = 0; i <a.length-1; ++i) { //内层循环,它决定每趟走一次 for (int j = 0; j <a.length-i-1 ; ++j) { //如果后一个大于前一个 if (a[j + 1] < a[j]) { //换位 temp = a[j];a[j] = a[j + 1];a[j + 1] = temp; } } } public static void sort2(int[] a) { int temp = 0; for (int i = 0; i <a.length-1; ++i) { //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环 int flag = 0; for (int j = 0; j <a.length-1-i ; ++j) { if (a[j + 1] < a[j]) { temp = a[j];a[j] = a[j + 1];a[j + 1] = temp; flag = 1; } } if(flag == 0){ break;} } } }
public class TestSelectSort {
public static void sort(int arr[]) {
int temp = 0;
for (int i = 0; i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。