java是编译型语言还是解释型语言?
编译型语言:通过针对特定平台(操作系统)的编译器一次性将高级语言源代码编译成可被该平台硬件执行的二进制机器码。
只需要编译一次,并包装成该平台所能识别的可执行性程序。
解释型语言:使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。
每次执行进都需要进行解释。
综上所述:java语言可以说是一门混合型的语言。因为java程序的执行要经过先编译,后解释的两个步骤。
1、java编译器将源程序编译成与平台无关的class字节码文件,这些class不面向任何具体平台,只面向jvm;2、再由jvm解释执行class文件。
jvm:java虚拟机。是一个抽象计算机。和实际计算机一样,具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器。
java中的垃圾回收是由jvm另开线程自行处理,程序员无需参与。
一个java源文件可以包含多个类,但最多只能有一个public类;
如果一个java源文件中包含一个public类,则该源文件的文件名必须和该public类的类名相同。
//定义类
public class Demo {
//主函数,程序入口
public static void main(String[] args) {
//执行语句
}
}
main函数:
public:该函数的访问权限是公开的、最大的。
static:该函数随着类的加载而加载。随着类的消亡而消亡。
void:该函数没有具体的返回值。
main:不是关键字,但能被jvm识别。
(String[ ] args):函数的参数,参数类型是数组,数组里的元素是字符串。args是形式参数。
注释:
单行注释和多行注释是在程序用来标记一些特殊的文本,这些文本不参与编译运行。
单行注释: // 注释内容
多行注释: /* 注释内容 */
文档注释是Java中特有的一种注释,它可以通过JDK中的工具(javadoc.exe)解析,生成帮助文档。
文档注释: /** 注释内容 */
常量:
表示不能改变的数值。
分类:整数常量、小数常量、布尔常量、字符常量、字符串常量、null常量;还有一种更为特殊的final修饰的变量也称其为常量。
变量:
内存中的一块存储区域。
格式:
变量类型 变量名 = 初始化值;
int x = 3;
x即称为变量,x的值可以变动,用来不断存储同一类型的常量,并可以重复使用。
变量必须先声明后使用。
作用范围是一对{ }之间。
进制:
特点:逢 x 进一。
java数值表示形式有:
1、二进制:计算机中存储任何数据都是以二进制的形式进行存储。
2、八进制:0-7,逢八进一,程序中以0开头。
3、十进制:0-9,逢十进一,日常生活中常用。
4、十六进制:0-15,逢十六进一,程序中以0x开头。
进制转换
a. 十进制转二、八、十六进制
除法取余,将要转换的数除以进制数,记住余数,再除以进制数,记住余数,直到这个数等于0为止,将所有余数反转就是对应的二进制表现形式。
b.二、八、十六进制转十进制
乘法,将要转换的数编号,编号从低位开始,从0开始,将每一位上的数乘以进制数的编号次方,最后将所有乘得的结果相加就是十进制表现形式。
c.二进制和八进制互转
八进制的每一位对应二进制的三位。
a. 二进制和十六进制互转
十六进制的每一位对应二进制的四位。
负数的表示形式:
祥见:http://blog.csdn.net/wyl530274554/article/details/7910642
/*注:java实现的进制转换:
二、八、十六进制转十进制:Integer.parseInt(String num, int redix);(返回int)
十进制转二、八、十六进制:Integer.toBinaryString(int i)、Integer.toOctalString(int i)、Integer.toHexString(int i)。(返回String)
*/
标识符:
用于给程序中变量、类、方法命名的符号。
规则:1、可以由字母、数字、下划线(_)、美元符($)组成,不能以数字开头。
2、标识符不能为关键字、特殊的直接量和保留字。
3、java语言严格区分大小写。
关键字:
java中的关键字都是小写字母。
java有48个关键字
java中有3个特殊的直接量:true、false、null
java中的2个保留字goto、const
转义字符:
通过 \ 来转变后面字符或符号的含义。
\n换行,\r回车,\b退格,\t制表符。
windows下换行用\r\n表示;Unix下用\n表示。
路径分隔符:
跨平台:File.separator
windows下用:\\ 或 /
其它平台:/
数据类型分类:
java是强类型语言(每个变量和表达式都有一个在编译时就确定的类型)
java中所有的变量必须先声明,后使用。
基本数据类型转换:
1、自动转换:(byte、short、char)——>int——>long——>float——>double——>字符串。
2、强制转换:基本类型强转加强制转换符;字符串强转为其它基本类型则用基本类型的包装类来完成操作,如Integer.parseInt(String str)。
运算符:
1、算术运算符 2、逻辑运算符 3、三目运算符 4、赋值运算符 5、比较运算符 6、位运算符
位运算符:
左移:<<一位相当于乘2的移动位数次幂,如3<<2 = 3*=12;
右移:①>>一位相当于除以2的移动位数次幂,用最高位补空位。②>>>无符号右移,即用0来补空位。
异或:相同为0,不同为1。
一个数异或同一个数两次,结果还是原值,如7^4^4=7。
//不用第三方变量,交换两个数,用异或。
int m = 3;
int n = 8;
System.out.println("m=" + m + ", n=" + n);//m=3,n=8
m = m ^ n;
n = m ^ n; //相当于(m^n)^n=m
m = m ^ n; //相当于m^(m^n)=n
System.out.println("m=" + m + ", n=" + n);//m=8,n=3
把自然数0转为1,1转为0
用1^(x)
按位与:&
取数值int num低四位用:num & 15
取数值int num低八位用:num & 255
三目运算符能替代简单的if...else语句。
流程控制:
1、顺序结构:一条一条的往下执行
2、分支结构:if、 switch
3、循环结构:for、while、do...while
控制循环结构:
1、break结束循环
2、continue结束本次循环,继续下一次。
3、return结束方法。
在控制台打印九九乘法表:
public class MultiplicationTable {
public static void main(String[] args) {
for(int i=1; i<=9; i++) {//控制行数
for(int j=1; j<=i; j++) {//控制每行元素输出
System.out.print(j+"*"+i+"="+i*j +"\t");//输出每一行
}
System.out.println();打印一行后,换行。
}
}
}
java中的标号:
outer:
放在循环语句之前才有作用
用例:break outer(跳出外循环);也可用于continue语句。
函数:
在java中称为方法。
是定义在类中的具有特定功能的一段程序代码。
格式:
修饰符 返回值类型 方法名(形参列表) {
执行语句;
return语句;
}
特点:
1、定义函数可以将代码进行封装
2、提高了代码复用性
3、函数只有被调用才会执行
4、对于没有具体返回值的情况,返回值类型可以用void表示,return;若在最后一行可以省略。
如何定义一个函数?
1、明确结果的类型(即返回值类型)
2、明确是否有未知数据的参与(即参数列表)
函数的重载:
是指:在一类中,允许存在一个以上的同名函数,只要它们的形参列表的内容不同即可。(参数个类、参数类型、参数顺序)
数组类型:
数组是一种类型;
数组中存放的是同一种类型的数据。可以通过角标操作数组中的元素。
数组初始化后,长度不可变。
数组常见异常:ArrayIndexOutOfBoundsException和NullPointerException都为RuntimeException的子类。
格式:1、int[] i = new int[3]; 元素类型[] 数组名 = new 元素类型[数组长度]
2、int[] arr = new int[]{1, 2, 3, 4}; 元素类型[] 数组名 = new 元素类型[]{元素,元素,...}
3、int[] arr = {1, 2, 3, 4}; 元素类型[] 数组名 = {元素, 元素,...}
数组打印数据的方法:
/*
*
* 数组打印的几种方式。
*
* */
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int[] arr = {2,5,9,7,4,3,6,1};
Arrays.sort(arr);//排序
//方法1:用Arrays工具类
System.out.println("Arrays工具:");
System.out.print(Arrays.toString(arr));
//方法2:for循环遍历数组
System.out.println("\n\nfor循环:");
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i]);
}
//方法3:增强for循环遍历数组(foreach)
System.out.println("\n\n增强for循环:");
for(int i : arr) {
System.out.print(i);
}
//方法4:while循环遍历数组
System.out.println("\n\nwhile循环:");
int x = 0;
while(x<arr.length) {
System.out.print(arr[x]);
x++;
}
//方法5:do...while循环遍历数组
System.out.println("\n\ndo...while循环:");
int n = 0;
do {
System.out.print(arr[n]);
n++;
} while(n<arr.length);
}
}