学习时的苦痛是暂时的,未学到的痛苦是终生的。
下面先来看下基础知识导图
基础组成:关键字、标识符、注释、常量和变量、运算符、语句、函数、数组
1. 关键字的定义和特点:
定义:被 Java 语言赋予了特殊含义的单词;
——(一群出生就在Java帝国带身份的家伙)
特点:关键字中所有字母都为【小写】;
2. 标识符:
定义:在程序中自定义的一些名称。
组成部分:由 26 个英文字母大小写,数字:0-9,符号 _$组 成;
定义合法标识符规则:数字不可以开头、不可以使用关键字,Java中严格区分大小写;
注意:在起名时,为了提高阅读性,要尽量有意义。
Java 中的名称规范:
包名:多单词组成时所有都小写,如:abc;
类名接口名:多 单词组成时,所有单词的首字母大写,如:AaBbCc;
变量名和函数名:多单词组成时,第 一个单词首字母小写,第二个单词开始个 单词首字母大写,如:aaBbCc;
常量名:所有 字母都大写,多单词时每个单词用下划线连接 如:AA_BB_CC。
3. 注释:
对于单行和多行注释,被注释的文字,不会被 JVM(Java 虚拟机)解释执行;对于文档注释,是Java特有的注释,其中注释内容可以被JDK提供的工具 javadoc所解析,生成一套以网页文件形式体现的该程序的说明文档;注释是一个程序员必须要具有的良好编程习惯;初学者编写程序可以养成习惯;先写注释再写代码;将自己的思想通过注释先整理出来,再用代码去体现;因为代码仅仅是思想的一种体现形式而已;用于注解说明解释程序的文字就是注释;提高了代码的阅读性。
Java 中的注释格式:
单行注释:格式://注释文字;
多行注释:格式:/*注释文字*/;
文档注释:格式:/**注释文字*/。
4.1. 常量:
定义:表示不能改变的数值。
Java 中常量的分类:
整数常量:所有整数;
小数常量:所有小数;
布尔型常量:较为特 有,只有两个数值:true 和 false;
字符常量:将一个数字字母或者符号用单引号(’’)标识;
字符串常量:将一个或者多个字符用双引号(””)标识;
null 常量:只有一个数值就是 null。
对于整数:
Java 有三种表现形式:十进制:0-9,满 10 进 1;八进制:0-7,满 8 进 1,用 0 表示开头;十六进制:0-9,A-F,满 16 进 1,用 0x 开头表示。
4.2. 变量:
变量的概念:内存中的一个存储区域;该区域有自己的名称(变量名)和类型(数据类型);该区域的数据可以在同一类型范围内不断变化;
理解:变量就如同数学中的未知数;
变量:就是将不确定的数据进行存储,也就是需要在内存中开辟一个空间。
为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用。
使用变量注意:变量的作用范围【一对{}之间有效】初始化值。
定义变量的格式:数据类型变量名 = 初始化值
注:格式是固定的、记住格式,以不变应万变
Java 语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配 了不同打小的内存空间。
数据类型:基本数据类型(数值型(整数类型【byte、short、int、long】
浮点类型(float,double)、字符型(char)、布尔型(boolean)、引用数据类型【类 (class) 、接口(interface)、数据([])】
注意:整数默认:int,小数默认:double。
数据类型空间:
byte 8 位二进制【一个 8 位二进制或 1 个字节】
short 16 位二进制【二 个 8 位二进制或 2 个字节】
int 32 位二进制【四个 8 位二进制或 4 个字节】
long 64 位二进 制【八个 8 位二进制或 8 个字节】
float(单精度)32 位二进制【四个 8 位二进制或 4 个字 节】
double(双精度)64 位二进制【八个 8 位二进制或 8 个字节】
char 取值:0-65535
boolean 取值:true,false。
类型转换:不同类型的数据不能进行运算。需要进行数据类型提升,从小往大提升,自 动数据类型提升。
强制类型转换:
格式:变量=(类型名)(需转换的数据) ;
什么时候使用强制转换:如:小数保留整数部分。
表达式的数据类型自动提升:所有的 byte 型、short 型和 char 的值将被提升到 int 型; 如果一个操作数是 long 型,计算结果就是 long 型;如果一个操作数是 float 型,计算结果就 是 float 型; 如果一个操作数是 double 型, 计算结果就是 double 型。
5. 运算符:
算数运算符:+正号,-负号,+加,-减,*乘,/除,%取模,++自增(前) ,++自增(后) , --自减(前) ,--自减(后) ,+字符串相加(字符串数据和任何数据使用+都是相连接,最终 都会变成字符串)
转义字符:通过\ 来转变后面字母或者符号的含义。
在 Linux 系统中换行是一个字符来 表示\n,windows 系统中,换行由\n\r 实现。\n:换行。\b:退格。相当于 backspace 键。
\r: 按下回车键 \t:制表符。相当于 tab 键。
赋值运算符:
符号:
=:赋值,
+=:a+=5 等价于 a=a+5,-=,*=,/=,%=
比较运算符:
==:相等于
!=:不等于
>:大于
>=:大于 等于
instanceof:检查是否是类的对象。
如:Boolean boolean = DogClass instanceof AnimalClass
注意:比较运算符的结果都是 boolean 型,也就是要么是 true,要么是 false;比较运算符“==”不能误写成“=” 。
逻辑运算符:
&:AND(与)两边的【boolean】表达式结果,有一个为 false,那么结果就是 false,只要两边都为 true,结果为 true;
:OR(或)两边的【boolean】表达式结果,只要 有一个为 true, 结果为 true, 只有两边都有 false, 结果为 false;
^: XOR (异或) 两边的 boolean 表达式结果相同结果为 false,两边不同结果为 true;
! :NOT(非) ;
&&:AND(短路) ;
OR: (短路) 。逻辑运算符用于连接 boolean 类型的表达式。
&和&&的特点:&:无论左边是真是 假,右边都运算;&&:当左边为假时,右边不运算。
和的特点::两边都做运算;: 但左边为真时,右边不运算。
位运算符:
>>:右移,如:6>>2=1 等价于 6/2^2=1;
>>>:无符号右移,如:3>>>1=1;
&:与运算,如:6&3=2;
:或运算,如:63=7;
^:异或运算,如:6^3=5;
~:反码,如:~6=-7;位运算是直接对二进制进行运算。
>>:就是除以 2 的移动的位数次幂。
>>:最高位补什么由 原有数据的最高位值而定;如果最高位 0,右移后,用 0 补空位;如果最高位 1,右移后, 用 1 补空位。
>>>:无论最高位是什么,右移后,都用 0 补。一个数异或同一个数两次,结 果还是拿个数。
三元运算符:
格式:(条件表达式)?表达式 1:表达式 2
如果条件为 true,运算后的 结果是表达式 1;如果条件为 false,运算后的结果是表达式 2。
如:获取两个数中大数,int x=3,y=4,z; z=(x>y)? x:y//z 变量存储的就是两个数的大数。
6. 语句
if 语句:
程序流程控制:顺序结构,判断结构,选择结构,循环结构。
判断结构:
if语句三种格式:
一层判断:if(条件表达式)
两层判断:if(条件 表达式)else{ 执行语句;};
多层判断:if(条件表达式)else if(条件表达 式)else。
ifelse 结构间歇格式:变量=(条件表达式)?表达式 1:表达式 2;
三元运算符:
好处: 可以简化 if else 代码
弊端:因为是一个运算符,所以运算完毕需要有一个结果
解决 DOS 命令下,编译无法识别 GDK 码方法:
方法一:使用-encoding 参数指明编码方 式:javac -encoding UTF-8 XX.java。方法二:保存 java 文件时,选择编码格式为 ANSI。
switch 语句
选择结构:switch 语句:
格式:switch(表达式)
switch(表达式) :表达式只接收五种类型:byte,short,int,char,string【jdk 1.7之后添加了string类型】
if 语句与 switch 语句的区别:if 除了能判断数值,还能判断具体区间,switch 判断区间 很累;对于数字是布尔型时,只有 if 能判断。
if 语句与 switch 语句的用法:如果要对具体数字进行判断,数值不多,而且符合 byte、 short、int、char,string 这五种类型,虽然两个语句都可以使用,建议用 switch 完成。因为效率稍高。其他情况一般用 if。当结果为布尔型或区间时,用 if 完成。If 的使用范围更广。
while 语句
循环结构:
代表语句:while、do while、for
while 语句格式:while(条件表达式)。
do while 语句格式:dowhile(条件表达式) ;
do while 特点是条件无论是否满足,循环体至少被执行一次。
while 和 do while 的区别:
while:先判断条件,只有条件满足才执行循环体。
do while: 先执行循环体,再判断条件,条件满足,再继续执行循环体。
简单一句话:do while:无论条件是否满足,循环体至少执行一次。
for 语句
for 语句格式:
for (初始化表达式; 循环条件表达式; 循环后的操作表达式)
注意:
a:for 里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真 就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程, 直到条件不满足为止。
b:while 与 for 可以互换,区别在于 for 为了循环而定义的变量在 for 循环结束就是在内存中释放。而 while 循环使用的变量在循环结束后还可以继续使用。c: 最简单无限循环格式:while(true) ,for( ; ; ) ,无限循环存在的原因是并不知道循环多少 次,而是根据某些条件,来控制循环。
for 和 while 的区别:
a:变量有自己的作用域。对于一个变量来将,如果这个变量仅仅 用于控制循环的次数,用作循环增量时用 for 语句。循环结束时,该变量在内存被释放。用 于优化内存。
b:for 和 while 可以进行互换,如果定义循环增量,用 for 更为合适。
什么时候使用循环结构?当要多某些语句执行很多次时,就是用循环结构。
循环注意:一定要明确哪些语句需要参与循环,哪些不需要。
两种思想:累加思想:原理:通过变量记录住每次变化的结果。通过循环的形式,进行 累加动作。
计数器思想:
原理:通过一个变量记录住数据的状态变化。也通过循环完成。
循环嵌套:语句嵌套形式,其实就是语句中含有语句。
其他流程控制语句:break(跳出) ,continue(继续) 。
Break 语句:应用范围:选择结 构和循环结构。Continue 语句:应用于循环结构。
注意:
a:这两个语句离开应用范围,存 在是没有意义的。
b: 这两个语句单独存在下面都不可以有语句,因为执行不到。
c:continue 语句是结束本次循环继续下次循环。
d: 标号的出现, 可以让这两个语句作用于指定的范围。
注意:标号只能用于循环语句上,给循环起名字。
continue:只能作用于循环结构。继续循环。
特点:结束本次循环,继续下一次循环。
总结:
a:break 和 continue 语句作用的范围。
b:break 和 continue 单独存在时,下面可以有任何语句。因为都执行不到。
7. 函数
函数的定义:什么是函数?函数就是定义在类中的具有特定功能的一段独立小程序;函数也称为方法。
函数的格式: 修饰符返回值类型函数名 (参数类型形式参数 1, 参数类型形式参数 2, ?) 。
返回值类型:函数运行后的结果的数据类型。
参数形式:是 形式参数的数据类型。
形式参数: 是一个变量, 用于存储调用函数时传递给函数的实际参数。 实际参数:传递给形式参数的具体数值。
Return:用于结束函数。
返回值:该值会返回给调 用者。
函数的特点:定义函数可以将功能代码进行封装;便于对该功能进行复用;函数只有被 调用才会被执行;函数的出现提高了代码的复用性;对于函数没有具体返回值的情况,返回 值类型用关键字 void 表示,那么该函数中的 return 语句如果在最后一行可以省略不写。
注意:函数中只能调用函数,不可以在函数内部定义函数;定义函数时,函数的结果应该返回 给调用者,交由调用者处理。
重点:函数的应用。如何定义一个函数呢?
a:既然函数是一个独立的功能,那么该功 能的运算结果是什么先明确。因为这是在明确函数的返回值类型。
b:再明确在定义该功能 的过程中是否需要未知的内容参与运算。 因为是在明确函数的参数列表 (参数的类型和参数 的个数) 。
函数的重载(overload) :重载的概念:在同一个类中,允许存在一个以上的同名函数, 只要它们的参数个数或者参数类型不同即可。
重载的特点:与返回值无关,只看参数列表。
重载的好处:方便与阅读,优化了程序设计。
重载示例://返回两个整数的和 int add(int x,int y);//返回三个整数的和 int add(int x,int y,int z);//返回两个小数的 和 double add(double x,double y)。
什么时候用重载?当定义的功能相同,但参与运算的未知内容不同。那么,这时就定义 一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
8. 数组
数组的定义:概念:同一种数据类型的集合。其实数组就是一个容器。
数组的好处:可以自动给数组中的元素从 0 开始编号,方便操作这些元素。
关键字:new:用来在内存中产 生一个容器实体。
格式一:元素类型[]数组名=new 元素类型[元素个数或数组长度];示例: int [] arr=new int[5];
格式二:元素类型[]数组名=new 元素类型[];
示例: int[] arr=new int[];int[] arr=。
内存结构:Java 程序在运行时,需要在内存中分配空间。为了提高运行效率,又对空间 进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存的管理方式。
A: 栈内存(栈区) :用于存储局部变量,当数据使用完,所占空间会自动释放。
B:堆内存(堆 区) :数组和对象,通过 new 建立的实例都存放在堆内存中。每一个实体都有内存地址。实 体中的变量都有默认初始化值。实体不在被使用,会在不确定的时间内被垃圾回收器回收。
C:方法区,本地方法区,寄存器。
获取数组中的元素。通常会用到遍历。
数组中有一个属性可以直接获得到数组元素个数——length。
使用方式:数组名称.length。
数组排序:
选择排序:内循环结束一次,最值出现头角标位置。
冒泡排序:第一圈:最 值出现在了最后位。
二维数组:
数组中的数组:
格式一:int[][] arr=new int[3][2];定义了名称为 arr 的二维数组;二维数组中有 3 个一维数组;每一个一维数组中有 2 个元素;一维数组的名称分别为 arr[0],arr[1],arr[2];给第一个一维数组 1 脚标位赋值为78 写法是:arr[0][1]=78。
格式二: int[][] arr=new int[3][];二维数组中有 3 个一维数组;每个一维数组都是默认初始值 null;可 以对这个三个一维数组分别进行初始化: arr[0]=new int[3]; arr[1]=new int[1]; arr[2]=new int[2]。
领取专属 10元无门槛券
私享最新 技术干货