第一章、Java基础
1、java概述
java是sun公司于1995年推出的一种面向对象的高级编程语言
2、Java平台划分
JavaSE:标准版 包含常用的类和接口,为JavaEE和JavaME提供基础
JavaEE:企业版:应用于企业开发
JavaME:微量级
3、JVM、JRE、JDK三者关系
- JVM:(Java virtual machine)Java虚拟机 为Java实现跨平台的操作提供可能
- JRE:(Java runtime environment )java运行环境 ,包括Java虚拟机和Java和核心类库等
- JDK:(Java development kits)Java开发工具,包括了JRE和JVM,包含了编译工具:javac.exe和打包工具:jar.exe
4、java语言的特点
- 简单
- 面向对象
- 动态性
- 编译和解释性
- 高性能性
- 安全性
- 稳健性
- 多线索性
5、java运行原理
源文件(.java)–javac编译–字节码文件(.class)–java解释执行–结果
6、java注释(3种)
- 单行注释: //
- 多行注释 /* */
- 文档注释 /** */ --javadoc命令,用于生成javaAPI文档
7、注释的作用
- 解释代码
- 调试错误
8、编码规范
类名:单个单词:首字母大写,其余的字母小写;多个单词组成:每个单词的首字母大写–遵循大驼峰式命名规则
变量名:单个单词:全小写;多个单词组成:第一个单词全小写,其余单词首字母大写–遵循小驼峰式命名规则
9、变量
在程序中,其只可以发生改变的数据
数据类型
基本数据类型(4类8种)重点***
整数类型:byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)
浮点类型:float(4个字节)、double(8个字节)
字符类型:char(2个字节)
布尔类型:boolean(1个字节)
引用数据类型
简言之:除了基本数据类型以外的数据类型都是引用数据类型
包括:类类型、枚举类型(enum)、String……等等……
10、变量的声明
格式:
数据类型 变量名 = 变量值
int age = 20;
String name = "张三";
11、标识符命名规则
概念
简言之:所有其名字的地方
命名规范
- 以数字、字母、下划线、$组成,不能以数字开头(阿里巴巴开发手册说也不能以代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。)
- 不能以java的关键字命名
- 见名知意、驼峰命名、大小写敏感、长度不限
- 严禁以拼音与英文混合方式、不建议采用拼音命名
数据类型转换
自动类型转换:数据范围类型由小到大
强制类型转换:数据范围类型由大到小(浮点类型由整数类型,会出现精度损失)
12、常量
在程序运行中,值不发生改变的量
注意:常量明明符合的原则
1、final修饰
2、常量名大写、多个单词用下划线链接
3、声明的同时赋值(如果没有赋值、下文只能赋值一次)
final关键字
final:是最终的意思
- final修饰变量,此变量是常量,其值一旦声明就无法改变
- final修饰的方法,此方法为最终的方法,不能被重写和重载
- final修饰的类,此类为终类,不能被继承
13、运算符
运算符是一种告诉编译器执行特定数学或逻辑操作的符号
1. 常用的运算符及应用
赋值运算符
基本赋值运算符:=
复合赋值运算符:+=,-=,*=,/=,%=
算术运算符
+,-,*,/,%
关系运算符
>,<,>=,<=,!=,==
逻辑运算符(&,|)
&&, || , !
//&,|:逻辑
//&&,||:短路运算符
/*
短路||:只要有一个表达式为真(true),则结果为true,
如果表达式两边是数值型的话,那么此时是位运算符,
就是计算的是16进制的运算,遵循 同为1则值为1 否则为0。
短路&&:只要有一个表达式为false,则结果为false
*/
if(5/2!=0 || 10/0==0){
System.out.println("true");
}else{
System.out.println("false");
}
结果为false
三目运算符(? :)
int c = a>b?a:b;
System.out.println(c);
运算符的优先级
- 单目运算符+,-,*,/,++,-- 优先级最高
- 优先级最低的是赋值运算符
- 可以通过()来提高运算的优先级
- 从右往左结合的运算符只有赋值运算符、单目运算符、三目运算符
- 算术运算符 > 关系运算符 > 逻辑运算符
位运算符面试题
1、请自己实现两个整数变量的交换
public class Demo4 { public static void main(String[] args) { int a = 6; int b = 3; System.out.println("变换之前:"+a); System.out.println("变换之前:"+b); System.out.println("-------------------"); int temp; temp = b; b = a; a = temp; System.out.println("变换之后:"+a); System.out.println("变换之后:"+b); } }
2、"^"的特点
异或:相同为false,相反为true
3、请用最有效率的方式写出计算 2 乘以 8 的结果
public class demo{ public static void main(String args[]){ //左移操作 << 左移操作相当于是乘以 2的左移数次幂 //右移操作 >> 右移操作相当于是除以 2的次幂 //例如 2>>1 = 2/2^1 = 1 System.out.println(2<<3); //相当于2^3 = 8 } }
14、数组
1. 数组概念
有相同的数据类型组成的集合,并使用同一个名字命名,通过下标来调用数组中的元素。
2. 数组相关概念
-
数组本身就是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
-
创建数组对象会在内存中开辟一块连续的空间,而数组名引用的是这块连续的空间,而数组中引用的就是这块连续的内存空间的地址。
-
数组的长度一旦确定,就不能改变
-
我们可以直接通过下标(索引)的方式调用指定的元素,速度很快
数组的分类:
- 按照维度:一维数组、二维数组、多维数组
- 按照元素的数据类型:基本数据类型数组、引用数据类型的数组
数组中常用的方法
- Arrays.toString() 将数组转化成字符串,返回值类型为String
String[] s1 = new String[]{"wer","fcd","twq"};
String result = Arrays.toString(s1);
System.out.println(result);
- Arrays.fill(数组名,值)主要是将数组中每个元素赋予相同的值,无返回值类型
该方法通过各种重载形式可完成任意类型的数组元素的替换
String[] s2 = new String[4];
Arrays.fill(s2, "wype,werq");
for (String s : s2) {
System.out.println(s);
}
- Arrays.binarySearch(数组名,查找的元素) 二分查找,必须先对数组进行排序
int[] arr = {1, 2, 2, 113, 42};
Arrays.sort(arr);
int i = Arrays.binarySearch(arr, 113);
System.out.println(i);
- Arrays.sort(数组名) 对数组进行排序
- Arrays.equals() 判断两个数组内容是否相等
3.数组的特点
1:数组是一个对象,是一种引用数据类型。可以表示一组数据的集合。
2:数组只能保存一种类型的数据。
3:数组可以使用 new 关键字 进行初始化。
4:数组中的每一个数据称为 元素 element。元素是在堆内存中分配的。而且是连续分配的。
5:数组的每一个元素都有一个序号,专业的称谓:下标、索引、角标。下标是从0开始的、升 序的、连续的、0序的。
6:数组有一个属性:长度的属性,表示数组中元素的个数该属性是 int 类型。 通过数组 名.length 来访问该属性。
7:数组中元素的下标的取值范围是:[0~length-1]。
8:通过new 关键字 在堆内存中元素被分配空间之后。每个元素被jvm 赋予默认值。
默认值规则:整数:0 浮点数:0.0 char:’\u0000’ boolean:false 引用数据类型:null。
9: 数组的每个元素通过 数组名[下标] 来访问。每个元素都是一个变量。和变量的用法一致。
10:数组变量、数组引用 保存的是 数组的实际元素的在堆内存中的"首地址"。
11: [] 代表的是 数组这种类型。
12:求下标是 n 的元素的地址:首地址+元素字节数*n。 数组根据下标访问元素的效率非常 快。(随机访问)。
13:数组的长度可以是 0,但是不能是 负数。
14:数组的长度一旦确定,就不能更改了。数组是定长的。
15、循环
1. for循环***
for循环的执行顺序
- 先要给循环变量赋初值 int i = 0;
- 在判断循环条件 i<=10;
- 符合循环条件执行循环体,否则结束循环;
- 执行自增或者自减操作
for(int i = 0;i <= 10;i++){
//循环体
System.out.println(i);
}
foreach()循环
增强for循环
int[] array = {1, 43, 21, 56};
for (int a : array
) {
System.out.println(a);
}
2. while循环
int a = 10;
while (a <= 15) {
System.out.println(a);
a++;
}
3. do while 循环
int a = 10;
do {
System.out.println(a);
a++;
} while (a <= 15);
do while循环执行次数 >=1
执行1次的效果——条件不满足的情况
int a = 10;
do {
System.out.println(a);
} while (a >= 20);
4. switch 循环***
switch语句中可以引入那些数据
- byte、short、int
- char
- enum
- String JDK1.8以后
String i = "1"; // byte、short、int、char、String、enum
switch (i) {
case "1":
System.out.println("1");
.
.
.
default:
System.out.println("else");
}
switch与if…else的区别
区别:
执行效率:switch执行效率会略高于if…else
switch语句一定都可以用if语句替换,但是并不是所有的if语句都可以用switch语句替换
相同点:都是流程控制语句