1.Java编译运行过程:
JAVA是编译型和解释型语言的结合体,首先采用通用的JAVA编译器将Java源程序编译成为平台无关的字节码文件(class文件),然后由java虚拟机(JVM)对字节码文件解释执行。
计算机高级编程语言按其程序的执行方式可以分为编译型语言和解释型语言。
编译型语言:用专门的编译器,针对特定的操作系统将源程序代码一次性翻译成计算机能识别的机器指令,例如C,C++等都属于编译型语言
解释型语言是指使用专门的解释器,将源程序代码逐条地解释成特定平台的机器指令,解释一句执行一句,例如:ASP,PHP等都属于解释型语言。
2.JDK,JRE,JVM的关系:
JDK (Java Development Kit)即可Java开发工具包,包含编写Java程序所必须的编译,运行等开发工具以及JRE,开发工具有:javac:用于编译java程序;java:用于启动jvm运行;javadoc:用于生成文档;jar:用于打包
JRE(Java Runtime Environment)即为Java运行环境,提供了运行Java应用程序所必须的软件环境,包含有java虚拟机(JVM)和丰富的系统类库。
JVM(Java Virtual Machines)即为java虚拟机,提供了字节码文件的运行环境支持
3.对于变量需要注意的问题:
(1)变量的声明:当使用一个变量时,必须对该变量进行声明,变量的声明包含两点:变量名和数据类型,变量在使用之前必须声明,否则会有编译错误。
(2)变量的命名:标识符的命名规则为:
Ⅰ.可以由字母,数字,”_”或者”$”符组成,但是不能以数字开头
Ⅱ.中文可以作为变量名,但是不提倡使用
Ⅲ.Java大小写敏感,严格区分大小写,命名时需要注意
Ⅳ.不能使用Java保留字(一些java语言规定好的,有特殊意义的字符如break,if等)
变量名需见名知义,且符合java规范:变量的命名需要采用驼峰命名法即如果变量的名字有多个单词组成,除第一个单词外,其他单词的首字母大写,其余字母小写。
(3)变量初始化:
java语法规定变量在使用之前必须初始化,即必须给该变量赋予特定的值。
(4)变量的访问:
Ⅰ.可以对变量进行赋值,更改等操作,但是需要注意,对变量的操作即为对其所存储的数据的操作
Ⅱ.变量的操作类型必须与类型匹配,对变量的赋值或者操作与其类型不匹配,会产生编译错误。
4. 8种基本变量,最常用的有五种类型,分别为int,long,double,char,boolean
8种基本类型存储空间以及使用场景:
5.int类型需要注意的问题:
Ⅰ.整数直接量是int类型,所谓直接量就是直接写出的整数,例如:int a=100;//100即为直接量,如果直接写出的整数超过了int的表达范围,将会出现编译错误,整数直接量也可以是16进制(以0x或0X开头)或8进制(以0开头)的形式
Ⅱ.整型数据除法运算中取整:若两个整数相除,会舍弃小数部分(不会四舍五入,直接舍去小数部分),结果也是整数。eg. int a=30/300; //a的值为0
Ⅲ.运算时要防止溢出,正数过大溢出,其结果为负,反之为正数(int的取值范围为-2147483648到:2147483647 )
Ⅳ.如果int类型范围不够,可以使用long类型,要表示long直接量,需要以L或l结尾。
6.double类型需要注意的问题:
Ⅰ.默认浮点直接量为double类型,如果需要表示float类型的直接类,需要加f或者F后缀
Ⅱ.double运算时会出现舍入误差,2进制系统中无法精确表示1/10,2进制表示10进制会有一些舍入误差,对于一些要求精确运算的场合会导致代码的缺陷。
7.char类型需要注意的问题:
Ⅰ.char类型是一个16位无符号整数(都是正数),这个值是对应字符的编码,java字符类型采用Unicode字符集编码
Ⅱ.对char型变量的赋值有三种方法,字符直接量赋值(char c1='A';),整型直接量赋值(char c2=65;)(范围在0~65535),Unicode形式(char c2='\u0041';)
汉字的unicode编码0x4E00到0x9FBF
Ⅲ.使用转义字符
8.基本类型间的转换
Ⅰ.类型间转换有两种方式:
1)自动类型转化(隐式类型转换):从小类型到大类型可以自动完成,类型的大小关系为:
2)强制转换:从大类型转换为小类型,语法为:(需要转换成的类型)变量
强制转换,可能造成精度丧失和溢出
Ⅱ.数值运算时的自动转换:如果在一个表达式中出现了多种数据类型,则运算结果会自动的向较大的类型进行转换。
Ⅲ.byte,char,short转换为int
1)int直接量可以直接赋值给byte,char和short类型,只要不超过其表示的范围
2) byte,char,short,char三种类型参与运算时,先一律转换为int类型再计算
9.++和--运算符:
Ⅰ.如果写在变量之前,表示在使用这个变量之前加1或者减1
Ⅱ. 如果写在变量后,表示这个变量使用完之后再加1或者减少1
Ⅲ.i=i++,无法执行多少次,i的结果都不会改变
10.短路逻辑:
Ⅰ.对于&&来说,当第一个操作数为false时,将不会判断第二个操作数(&则会继续判断第二个操作数,不存在短路逻辑现象)
Ⅱ.对于||来说,当第一个操作数为true时,将不会判断第二个操作数
11.使用=进行赋值,在赋值运算符=前加上其他运算符即为扩展赋值运算符,其效率高于赋值运算符,推荐使用。
12.使用“+”进行字符串连接:
Ⅰ.当+号作用于两个数字类型变量时,进行算术运算
Ⅱ.当+号两边有一个是字符串类型时,进行字符串的连接,连接后的结果为字符串类型
eg. String str=4+2+“66”; //str=666;
13.三目运算符:其结构为:boolean表达式?表达式1:表达式2
Ⅰ.先计算boolean表达式
Ⅱ.如果boolean表达式的值为true,整个表达式的值为表达式1的值,反之为表达式2的值
Ⅲ.三目运算符的右结合性,即有多个三目运算符嵌套使用的时候,先计算右边的三目运算符的结果
eg. Boolean b=true?false:true==true?false:true; //b=true?false:false b=false;
14.考虑到代码的可读性,扩展性,建议即便if语句块中只有一条语句,也不要省略{}
15.使用switch需要注意:
Ⅰ.case后面的常量值必须不同
Ⅱ. switch后面的整型表达式的值必须是整型或者字符型
Ⅲ.switch常常和break语句结合使用实现分支的功能,实现分支功能的效率要高于else if结构,并且结构更清晰,用于分支的时候推荐使用
16.循环结构需要注意:
Ⅰ.while语句的执行过程:首先计算boolean表达式的值,而后进行判断,若值为true则执行语句块,语句块执行完成之后,再次判断boolean表达式的值,如果为true则继续执行,如此循环往复,直到boolean表示式的值为false时,退出while循环。
while语法结构: while(boolean表达式){ 语句块;}
Ⅱ.do while语句的执行过程:先执行语句块,再判断boolean表达式,如果为true则再次执行语句块,如此循环往复,直到boolean表达式的值为false时止。
do while语法结构:do{语句块;}while(boolean 表达式);
(注意区分while和do while的区别)
Ⅲ.for语句用于实现固定次数的循环
for语句的语法:for(表达式1;表达式2;表达式3){语句块;}
特殊方法:1)表达式1位置内容为空,表达式后方的”;“不可少(下同)
2)表达式3位置内容为空(放置到语句块中)
3)表达式1,2,3位置内容均为空(可能造成死循环,可以用break跳出 循环)
4)表达式1和表达式3的位置内容多样化,表达式可以使用逗号表达式,逗号表达式通过“,”运算符隔开多个表达式组成,从左到右开始计算
Ⅳ.break可以用在循环体中用于退出循环结构,常常与条件语句一起使用
continue只能用于循环中,作用是为跳过循环体中剩余语句而执行下一次循环
17.数组需要注意的问题:
Ⅰ.声明数组:数据类型【】数组名=new 数据类型【大小】
Ⅱ.数组的初始化:
1)基本类型的数组,创建完成之后,默认为其数组元素设置了初始值,元素的初始值为:byte,short,char,int,long为0;float和double为0.0;boolean为false;
2)数组初始化的方法:
ⅰ.数组声明的同时进行初始化:int[] arr={10,20,30,40};
ⅱ.对于已经声明的数组,初始化方法为:int[] arr; arr=new int[]{10,20,30};
Ⅲ.数组的访问:
1)获取数组的长度:可以调用数组的length属性获取数组的长度
2)通过下标访问数组元素,下标从0开始
3)遍历数组元素:选择for循环进行变量,循环变量作为访问数组的下标
Ⅳ.数组的复制:
1)System.arraycopy方法用于数组复制:
public static void arraycopy(Object src,int srcPoc,Object dest,int destPos,int length)
src:源数组
srcPos:源数组中的起始位置
dest:目标数组
destPos:目标数组中的起始位置
length:要复制的数组元素的数量
2)Arrays.copyOf方法用于数组的复制;
类型【】 newArray=Arrays.copyOf(类型【】original,int newLength)
Ⅴ.数组的扩容:java语法规定,数组的长度在创建之后是不可改变的,所谓的扩容实际上是指创建一个更大的新数组并将原有的数组的内容复制到其中,可以通过Arrays.copyOf()方法,简单的实现数组的扩展。代码如下:
int【】 a={10,20,30,40};
a=Arrays.copyOf(a,a.length+1);
Ⅵ.数组的排序:
1)常用的排序算法:冒泡算法:比较相邻的元素,如果违反最后的顺序准则,则交换。
<span style="font-size:18px;"> public static int[] bubbleSort(int[] arr){
int t;
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
return arr;
}</span>
2)Arrays.sort(数组)方法用于实现数组的排序
18.方法用于封装一个特定的功能,定义时需要考虑五个要素:修饰词、返回值类型、方法名、参数列表、方法体
public static int sum ( int num1 , int num2 ) {
// 方法体
}