第一章 JAVA基础知识
1.1 java基本信息
JAVA:是一种面向Internet的编程语言
特点:简单易学,完全面对对象,与平台无关
Java语言的三种技术架构:
J2EE:企业版
J2SE:标准版
J2ME:小型版
人机交互:图形界面交互
命令行交互
1.2 Java语言的特点:跨平台性
有JVM,同一个Java程序在三个不同的操作系统中都可以执行。这样就实现了
Java程序的跨平台性。java具有良好的可移植性。
1.3JRE JDK
JRE:java运行环境。
包括java虚拟机和java程序所需的核心类库
JDK:java开发工具包
其中包括了java的开发工具 也包括了JRE 所以安装了JDK 就不用单独安装JRE了。
使用jdk开发完成的java程序 交给jre与运行
1.3.2 环境变量配置jdk:将jdk存储的路径放入path
配置好后,在cmd中输入javac验证。
设置path临时环境变量:cmd中set命令
1.4 第一个程序 Hello World
1.将java代码编写到扩展名为.java的文件中。
2.通过javac命令对java文件进行编译
3.通过java命令对生成的class文件进行运行。
注:运行程序时候才会调用虚拟机,编译程序时不会。
1.5设置classpath
set classpath=c:\ jvm会在classpath中寻找.class中
如果set classpath=c:\;则会在当前目录找。
set _;c:\;从当前目录先找 然后从c盘找
--------------------------------------------------------------------
第二章 java语言基础
2.1关键字
关键字一般小写 类名大写1
2.2标识符
由26个英文字母大小写,数字0-9 符号_$组成
注:数字不可以开头 不可以使用关键字
2.3注释:数字不编译
a.单行注释//
b.多行注释/* */
c:文档注释/** 文档中所写的文件可以通过javadoc提取 */
程序第一步应该写多行注释:/*需求*/
2.4.常量和变量
常量:表示不能改变的数值。
分类:
整数常量。所有整数
小数常量
布尔型常量;true false;
字符常量。将一个数字字母或者符号用单引号('')标识
字符串常量
null常量
对于整数:四种表现形式。
二进制:0,1,满2进1
负数的二进制表现形式:这个数的整数按位取反加一。
八进制:0-7;满8进1;用0开头标识 三个二进制位是一个八进制位 0开头
十进制 满10进1
十六进制 0-9 A-F 满16进1;用0x开头 四个进制为为一个16进制位 0x开头
byte 字节=8个二进制位
1K=1024B
变量:作用域{ 变量 } 变量要进行初始化,要不然不能参与运算 要注意作用域。
概念: 内存中的一个存储区域
该区域有自己的名称(变量名)和类型(数据类型)
该区域的数据可以在同一类型范围内不断变化。
数据类型:
1.基本数据类型
整数:byte(8位)、short(16位)、int(32位;默认)、long(64位加l)
浮点型:float(4个自己 加f),double(8个字节)
字符型:char(2个字节 0——65535,无符号。)
布尔型:boolean
类型转换:例如byte类型+int类型 byte会自动提升为int类型。
2.引用数据类型
2.5运算符
算术运算符 +- * / %(求余运算) +(连接符)
// ++(自增) --(自减)
赋值运算符
比较运算符
比较运算符,运算完的结果必须是true或者false
instanceof 检查是否是类的对象。
逻辑运算符
用于连接两个Boolean类型的表达式。
&:与 两边表达式都会判断 两边为真则为真 否则为假
|:或 两边表达式都会判断。两边为假则为假 否则为真
&&短路与:当左边式子为假则整个表达式为假,不会判断右表达式
||:短路或:当左边式子为真则整个表达式为真,不会判断右表达式
^异或:和或有点不一样:true ^ true =false; 异或两边结果相同为false;
一个数异或同一个数两次,结果还是这个数。
!非运算:!true = false;
位运算符:用于2进位运算的符号
<<:左移几位 相当于该数据的2的几次方。
>>:右移 该数据除以2的几次方。高位 空位都是用1补。
>>>:高数出现的空位,无论原高位是什么 空位都是用0补。
&:6&3 : 0110&0011 = 0010=2; 整数是32位相与
|: 6|3: 110|011=111=7
^: 6^3 110^011 = 101 = 5
练习:对两个整数变量进行互换(不需要第三方变量)
int a=3,b=5;
a=a+b;
b=a-b;
a=a-b;
//建议不要使用,如果两个整数的数值过大会超出int范围 会强制转换。数据回变化
面试的时候用。
a = a^b;//a=3^5;
b=a^b;//b=(3^5)^3;a=5;
a=a^b;(3^5)^3;a=5;
三元运算符:
获取两个数中的最大数
int x =3,y = 4,z;
z = (x>y)?x:y;//z变量存储的就是其中的最大数
2.6语句
if语句:三种格式
1.if(条件表达式){
执行语句:
}
2..if(条件表达式){//三元运算符就是if else语句简写格式(当运算之后有一个具体的结果可以选择三元运算符)
执行语句:
}else{
执行语句:
}
3.if(条件表达式){
执行语句:
}else if{
执行语句:
}else{
执行语句。
}
局部代码块:可以定义局部变量的生命周期。变量只在这个代码块中有作用
选择结构:switch 语句
格式:switch(表达式){//byte short int char
case 取值1:
执行语句;
break;
case 取值2:
执行语句;
break;
default://无论default放假哪个位置 肯定最后执行default
执行语句;
break;
}
if和switch的区别:
if:
1.对具体的值进行判断
2.对区间判断
3.对运算结果是boolean类型表达式进行判断
switch:
1.对具体的值进行判断
2.值的个数通常是固定的。
对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的
答案都加载进内存,效率相对高一点。
3.缺点:书写麻烦。
循环结构:练习题:1~100之间 6的倍数出现的次数
while语句: 当表达式为真的话会重复执行,未假则循环结束。
while(表达式){
执行语句
}
do...while:先执行语句再判断。
do{
执行语句
}while(表达式);
for循环:
for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句;(循环结构)
}
for和while的特点:
1.for和while可以互换。
2.格式上的不同 。 for如果需要变量控制循环,该变量只作为循环增量存在时
只在for循环中有效 while结束后还可以使用该变量
循环小结:
1.当对某些代码执行很多次时,使用循环结构完成。
当对一个条件进行一次判断时,可以使用if语句
当对一个条件进行多次判断时,可以使用while语句
使用循环时,需要明确哪些语句需要参与循环,哪些不需要。
循环通常情况下,需要定义条件需要控制次数。
转移至符 // \n回车 \t制表符 \b退格 \r按下回车键
// 在Linux中回车符是\n,window是 \r\n;
break和continue:
break(跳出):作用范围要么是switch,要么是循环语句
注:当break语句单独存在时,下面不要定义其它语句,因为执行不到。
break是跳出所在的当前循环。
for循环可以取别名:break 通过标志名跳出其循环
yonna:for(;;){
gakki:for(;;){
break yoona;//直接跳出外循环。
}
}
continue(继续):作用范围:循环结构。
效果:结束本次循环,继续下次循环。
当continue语句单独存在时,下面不要定义其它语句,因为执行不到。
2.7函数
定义:在类中具有特定功能的一段独立小程序,也成为方法。
格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2)
{
执行语句;
return返回值;//返回值的类型与规定的返回值类型应一致
}
也可以没有返回值类型 void 和形参 :
public void print(){System.out.println("Hello");}//void用于没有返回值时。
函数的特点:1.将功能代码进行封装
2.便于对该功能进行复用
3.函数只有被调用才能执行。
4.提高代码的复用性
5.对于函数没有具体返回值的情况,返回值类型用关键字void表示,
那么该函数中的return语句如果在最后一行可以不写。
注意:函数中不能定义其它函数。
函数的结果应该返回给调用者,交由调用者处理。
返回值和参数没有关系
函数内存加载过程
函数的重载:
在同一个类中,允许存在一个以上同名函数,只要它们的参数个数或参数类型不同即可
1.同一个类
2.同名。
3.参数个数不同或者参数类型不同
4.函数重载和返回值类型无关。
5.如果出现不确定性 编译会失败。
2.8数组
概念:同一种类型数据的集合。数组是一个容器。
优点:自动给数组中的元素从0开始编号,方便操作这些元素。
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]
int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,....};
int[] arr = new int[]{1,2,3,4,5};
int[] arr = {1,2,3,4,5};
局部代码块:{//局部代码块。限定局部变量的生命周期
执行体;
}
内存划分:
1.寄存器。
2.本地方法区
3.方法区
4.栈内存
存储的都是局部变量。
而且变量所属的作用域一旦结束,该变量就自动释放。
5.堆内存
存储的是数组或对象(其实数组就是对象)凡是new建立的都在堆中。
特点:1.每一个实体都有首地址值
2.堆内存中的每一个变量都有默认初始化值。
整数0,小数0.0 ,0.0f boolean false,char '\u0000';
3.垃圾回收机制。
数组遍历:
注:对操作最基本的动作是存和取。
核心思想:就是对角标的操作
求数组的长度:arr.length;
数组的使用情况:如果数据出现了对应关系,而且对应关系的一方是有序的数字编号。
并作为下标使用,要使用数组。
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
二维数组:
格式1:int[][] arr = new int[3][2];
格式2:int[][] arr = new int[3][];
arr[0] = new int[3];
arr[1] = new int [2];
arr[2] = new int [1];
格式3:int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
二维数组遍历:
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.println(arr[i][j]);
}
}