目录
Java概述
基础语法
数据类型
编码
标识符
注释
访问修饰符
变量和常量
运算符
选择结构语句
循环结构语句
方法
一维数组
编程:编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就叫做编程。
Java:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程
jdk1.5之后的三大版本:
JVM、JRE和JDK的关系:
跨平台性:是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。 实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运 行java程序。
Java语言有哪些特点:
字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
采用字节码的好处:Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
java中的编译器和解释器: Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提 供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特 定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。 Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码------- > 程序运行。
Java程序的主类: 一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java 小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。
Java应用程序与小程序之间的差别: 简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用 init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。
Java和C++的区别:
Oracle JDK 和 Open JDK 的对比
定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空 间。
基本数据类型转换:
取值范围:byte < short < int < long < float < double
数字为整数默认类型为:int;数字为小数默认类型为:double
- 自动转换:取值范围从小往大的转,会默认转换
- 强制转换:取值范围从大往小的转,会强制转换
- 语法结构:目标类型 变量名=(目标类型)(被转换的数据);
强制类型转换一般不推荐使用,因为有可能发生精度损失、数据溢出。
数据溢出:数据范围大的数据类型转换为数据范围小的数据类型,装不下,数据溢出了。
精度损失:就是把有一部分数据的精度给舍掉了。例如:int num = (int) 3.99;输出结果为3。byte/short/char这三种类型在运算的时候,都会被首先提升为int类型,然后在计算。
boolean类型不能发生数据类型转换
switch 的case类型:在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java5 开始,Java 中引入了枚举类型, expr 也可以是 enum 类型,从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。
float f=3.4;是否正确 :不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成 float f =3.4F;
short s1 = 1; s1 = s1 + 1;有错吗?对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int型,需要强制转换类型才能赋值给 short 型。 而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short(s1 + 1);其中有隐含的强制类型转换。
Java语言采用Unicode编码标准,
特点:Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。
含义:给类,接口,方法,变量等取名字时使用的字符序列
标识符的命名规范:英文大小写字母 or 数字字符 or $和_
注意事项:不能以数字开头、不能包含特殊符号除了$和_、不能是Java中的关键字、区分大小写
定义:用于解释说明程序的文字
作用: 在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。
分类:
定义:Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
类型:
常量:在Java语言中,主要是利用final关键字来定义常量。当常量被设定后,一般情况下就不允许再进行更改。为了提高代码的共享程度与提高代码的易读性。定义常量的时候一般都用大写字符和下划线,并且常量在定义的时候,就需要对常量进行初始化。
变量:在程序执行的过程中,其值会发生变化,就是用来存储可变化的数据的一个元素。书写格式:数据类型 变量名 = 初始值;(或者数据类型 变量名称; 变量名称 = 数据值;)
变量的作用域:规定了变量所能使用的范围,只有在作用域范围内变量才能被使用。根据变量声明地点的不同,变量的作用域也不同。
变量的分类:根据作用域的不同,一般将变量分为不同的类型:类变量、局部变量、方法参数变量及异常处理参数变量。
比较运算符:是两个数据之间进行比较的运算,运算结果都是布尔值true和false。
逻辑运算符:
&和&&的区别: &运算符有两种用法:(1)按位与;(2)逻辑与。 &&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true 整个表达式的值才是 true。&&之所以称为短路运算,是因为如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。 注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
移位操作符:运算对象是二进制的"位"。移位操作符只可用来处理整数类型。左移位操作符(<<)能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0)。"有符号"右移位操作符(>>)则按照操作符右侧指定的位数将操作符左边的操作数向右移动。"有符号"右移位操作符使用"符号扩展":若符号为正,则在高位插入0;若符号位负,则在高位插入1.
Java中增加了一种"无符号"右移位操作符(>>>),它使用了"零扩展":无论正负,都在高位插入0。这一操作符在C或C++是没有的
算术运算符:算术运算符用在数学表达式中,其用法和功能与代数学中一样
++i和i++的区别:单独使用的时候是没有区别的,但是如果当成运算符,就会有区别了!先说a=i++,这个运算的意思是先把i的值赋予a,然后在执行i=i+1;当i初始等于3时,执行a=i++,最终结果a=3,i=4。而a=++i,这个的意思是先执行i=i+1,然后在把i的值赋予a;当i初始等于3时,执行a=++i,最终结果a=4,i=4。
三目运算符/三元运算符:格式:(条件表达式)?表达式1:表达式2;
如果条件表达式为true,就输出打印表达式1的内容
如果条件表达式为false,就输出打印表达式2的内容。
if条件语句结构分类:
switch case 语句:
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
switch 语句可以包含一个 default 分支,该分支一般是 switch语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default分支不需要 break 语句。
语法结构:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
语法结构:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
语法结构:
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
三种循环的区别:
break ,continue ,return 的区别及作用:
在 Java 中,如何跳出当前的多重嵌套循环 :在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的 break 语句,即可跳出外层循环
public static void main(String[] args){
ok;
for(int i =0; i <10; i++){
for(int j =0; j <10; j++){
System.out.println("i="+ i +",j="+ j);
if(j ==5){
break ok;
}
}
}
}
含义:特定功能的代码块
好处:解决了代码的冗余(减少重复性的代码)
方法的分类:
方法的重载
含义:方法与方法之间的关系 条件: 1.在同一个类中 2.方法名一致 3.参数列表的个数或者是类型不一致 4.与返回值无关(一个方法有没有返回值,不影响他们之间的重载关系) 好处:系统会根据实参类型自动匹配到对应的方法中
注意:编译时只看方法类型,不看方法名,以下两个方法是重载关系(参数和参数一一对应)
含义:一组数据的容器 作用:存储多个数据
数组的声明: 数据类型[] 数组名/变量名;
注意:
数组的输出的三种方式
(1)传统的for循环方式 (2)for each循环 for(String element : names){//依次将元素赋值给element System.out.println(element);} (3)利用Array类中的toString方法 System.out.println(Arrays.toString(array));
数组的初始化: