JavaSE :标准版 面向桌面型应用(Windows下的应用程序)的Java平台。提供完整的Java核心API,也叫J2SE.
JavaEE:企业版 开发企业环境下的应用程序。该技术体系中包含的技术 Servlet Jsp。主要针对Web应用程序开发。也叫J2EE.
JavaME:小型版 支持Java程序运行在移动终端(手机、PDA:掌上电脑 条码扫描器、RFID读写器、POS机等
智能手机、平板电脑、手持的游戏机等)的平台,对Java API有所精简,并加入了针对移动终端的支持。也叫J2ME. Java Card
支持一些Java 小程序(Applets)运行在小内存设备(智能卡)上的平台。
两个基本概念:类和对象。
三大特性:封装,继承,多态。
在吸收了c/c++ 语言的优点。去除了影响健壮性的因素(指针、内存的申请和释放)。
通过Java语言编写的应用程序在不同的系统平台上都可以运行。
Java应用程序 Java虚拟机 JVM 操作系统。
1.JVM (java虚拟机)
2.GC 垃圾回收机制
java 对不在使用的内存空间回收。垃圾回收在Java程序运行过程中开了个系统级线程自动检测进行(优点:自动 不会出现忘记回收,缺点:回收不及时)。
c/c++ 的垃圾回收 由程序员手动编写代码回收。(优点:能够在内存不使用时快速回收,准确高效。缺点:容易失误,出现bug)
宁可回收不及时 一定要回收。
path :Windows系统执行命令时要搜寻的路径
1.打开我的电脑–属性–高级–环境变量
2.新建系统变量JAVA_HOME 和CLASSPATH
变量名:JAVA_HOME
变量值:D:\JAVAJDK\Java\jdk1.8.0_231(本人的安装目录)
变量名:CLASSPATH
变量值:.
;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3.选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。
变量名:Path
变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
Java开发工具包 1.包含了Java的开发工具,2.包括JRE。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等。
安装了JDK 也就不用单独安装JRE。
Java运行环境 包括Java虚拟机(JVM )和Java程序所需的核心类库(API)等。
如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
简单而言,使用JDK的开发工具完成的java程序,交给JRE去运行。
.java文件(源文件) ----javac.exe---- 编译----.class文件( 字节码文件)----java.exe----执行----JVM
1.将 Java 代码编写到扩展名为 .java 的文件中。
通过 javac 命令对该 java 文件进行编译(通过DOS)。
通过 java 命令对生成的 class 文件进行运行
2.在一个java源文件可以声明多个class,但是只能最多有一个类声明为public ,而且要求声明为public的类的类名必须与源文件名一致
Java源文件以“java”为扩展名。源文件的基本组成部分是类(class)。
3.Java应用程序的执行入口是main()方法。它有固定的书写格式:public static void main(String[] args) {…}
//arg:arguments 参数
4.输出语句
System.out.println(); 先输出数据,后换行
System.out.print(); 只输出数据
5.Java语言严格区分大小写。
Java方法由一条条语句构成,每个语句以“;”结束。
括号都是成对出现的,缺一不可。
Ø单行注释 //注释文字
Ø多行注释 /注释文字 / 不可以嵌套使用
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
Ø文档注释(java特有)
注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档。
javadoc -d 自己起一个名字 -author -version -param HelloWorld
/
@author 指定java程序的作者
@version 指定源文件的版本
@param 方法的参数说明信息
*/
Java语言提供了大量的基础类,因此Oracle 也为这些基础类提供了相应的API文档,
用于告诉开发者如何使用这些类,以及这些类里包含的方法。
现有Java版本尚未使用,但以后版本可能会作为关键字使用。
自己命名标记符时要避免使用这些保留字
byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
ØJava 对各种变量、方法和类等要素命名时使用的字符序列称为标识符
Ø凡是自己可以起名字的地方都叫标识符。
Ø由26个英文字母大小写,0-9 ,_或 $ 组成
Ø数字不可以开头。
Ø不可以使用关键字和保留字,但能包含关键字和保留字。
ØJava中严格区分大小写,长度无限制。
Ø标识符不能包含空格。
注意:在起名字时,为了提高阅读性,要尽量有意义,“见名知意”。
Ø包名:多单词组成时所有字母都小写:xxxyyyzzz
Ø类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz
Ø变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz
Ø常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
浮点型常量有两种表示形式:
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2 512E2 100E-2
字符型常量的三种表现形式:
字符常量是用单引号‘ ’括起来的单个字符,涵盖世界上所有书面语的字符。例如:char c1 = ‘a’; char c2 = ‘中’; char c3 = ‘9’;
Java中还允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’; // '\n’表示换行符
直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a 表示 \n。
char类型是可以进行运算的。因为它都对应有Unicode码。
boolean 类型适于逻辑运算,一般用于程序流程控制:
if条件控制语句;
while循环控制语句;
do-while循环控制语句;
for循环控制语句;
boolean类型数据只允许取值true和false,无null。
不可以0或非 0 的整数替代false和true,这点和C语言不同。
字符串: String类(不是基本数据类型,属于引用数据类型)
值null可以赋值给任何引用类型(类、接口、数组)的变量,用以表示这个引用类型变量中保存的地址为空。
String类是一个典型的不可变类,String对象创建出来就不可能被改变。
创建出的字符串将存放在数据区,保证每个字符串常量只有一个,不会产生多个副本。中数据类型变量做运算
String可以和8种数据类型做运算,其运算只能是连接运算:+,运算结果还是String型
容量小的类型变量自动转换为容量大数据变量。按容量大小(表示数的范围,不是字节数的多少)排序为:
有多种类型的数据混合运算时,系统首先自动将所转换成容量最大那种数据类型,然后再进行计算。
byte,short,char 之间不会相互转换,他们三者在计算时首先为 int 类型 。
boolean 类型不能与其它数据运算。
当把任何基本数据类型的值和字符串 (String) 进行连接运算时 (+) ,基本数据类型的值将自动转化为字符串 (String) 类型 。
自动类型转换的逆过程 ,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 :() ,但可能造成精度降低或溢出 ,格外要注意 。
通常 ,字符串不能直接转换为基本类型 ,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型 。
Ø如: String a = “97”; int i = Integer.parseInt (a);
Øboolean 类型不可以转换为其它的数据类型。
按声明位置分类
在方法体外,类内声明的变量称为 成员变量 。
在方法体内部声明的变量称为 局部变量 。
两者在初始化值方面的异同:
异:局部变量除形参外,需显示初始化
同:都有生命周期
取模运算的结果正负号与被模数有关
自增运算不会改变本来的数据类型
符号: =
Ø当“=”两侧数据类型不一致时, 可以使用自动类型转换或使用强制类型转换原则进行处理 。
Ø支持连续赋值 。
扩展赋值运算符: +=, -=, *=, /=, %=
比较运算符的结果都是 boolea型,也就是要么true,要么是 false 。
&—逻辑与 | —逻辑或 !—逻辑非
&& —短路与 || —短路或 ^ —逻辑异或
逻辑运算符用于连接布尔型表达式,在 Java中不可以写成 3
& 与 && 的结果相同
单&时,左边无论真假,右边都参与运算
双&时,左边为真,右边参与运算。左边为假,右边不参与运算
|和||的区别 与上同理
位运算符
位运算符直接对整数(整型)的二进制进行运算
<< : 在一定范围( int 32位)内,每向左移一位,相当于 * 2
: 右移 (如果最高位为1 复数 拿1补,如果最高位为0 正数 拿0补)
三元运算符
格式: (条件表达式)?表达式一:表达式二; //必须返回一个结果(表达式)
条件表达式的结果为Boolean型
凡是可以使用三元运算符的地方都可以改写为if else 语句,反之不成立
条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量。
语句块只有一条执行语句时,一对{}可以省略,但建议保留。
if-else语句结构,根据需要可以嵌套使用。
当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略。
当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓。
当多个条件是“包含”关系时,“小上大下/子上父下”。
switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举(jdk 5.0),String (jdk 7.0);
case子句中的值必须是常量,不能是变量名或不确定的表达式值;
同一个switch语句,所有case子句中的常量值互不相同;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default
如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,凡是能使用switch-case的,都可以改写为if-else。反之不成立。
②循环条件部分为boolean类型表达式,当值为false时,退出循环
①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔
④可以有多个变量更新,用逗号分隔。
语法格式:
①初始化部分;
while(②循环条件部分){
③循环体部分;
④迭代部分;
}
注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
for循环和while循环可以相互转化。
语法格式
①初始化部分;
do{
③循环体部分;
④迭代部分;
}while(②循环条件部分);
注:do-while循环至少执行一次循环体。
最简单“无限” 循环格式:while(true) , for(;,用break 结束循环。
结束当前循环 用于switch-case分支结构和循环结构中
用于终止某个语句块的执行
结束当次循环 只用于循环结构中
用于跳过其所在循环语句块的一次执行,继续下一次循环
两者相同点
①两者关键字的后面不能直接加执行语句的。
②出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块
结束当前方法 (循环也在方法中)
与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
数组的长度一旦确定,就不能修改。
数组元素是有序的。
分类:基本数据类型元素的数组
引用数据类型元素的数组(对象数组)
①定义并用运算符new为之分配空间后,才可以引用数组中的每个元素。
②数组元素的引用方式:数组名[数组元素下标]
③数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
数组元素下标从0开始;
④长度为n的数组合法下标取值范围: 0 —>n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。
对于基本数据类型而言,默认初始化值各有不同
对于引用数据类型而言,默认初始化值为null(注意与0不同!)
数组元素的赋值(杨辉三角、回形数等)
求数值型数组中元素的最大值、最小值、平均数、总和等
数组的复制、反转、查找(线性查找、二分法查找)
数组元素的排序算法
衡量排序算法的优劣:
1.时间复杂度:分析关键字的比较次数和记录的移动次数
2.空间复杂度:分析排序算法中需要多少辅助内存
3.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保持不变,则称这种排序算法是稳定的。
内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。
外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。
java.util.Arrays类即为操作数组的工具类
注:本文章是根据哔哩哔哩公开课 Java -Java 学习- Java 基础到高级-宋红康-零基础自学Java-尚硅谷 整理所得
大爱康师傅!!