01-语言概述与变量类型
领域
- Java Web: 后台开发
- 大数据开发
- Android应用程序开发:客户端开发
DOS操作
- 切盘:C:
- 呈现目录: dir
- 新建文件夹:md 文件夹名称
- 进入目录/文件夹: cd 路径
- 直接退到盘符: cd/
- 创建文件: echo name:xxx>1.doc
- 删除文件: del 1.doc | del *.txt
- 删除文件夹: rd 文件夹名称(只能删除空目录)| del 文件夹名称(是删除此文件夹下面的所有文件,而不是删除文件夹)
- 退出命令行:exit
编程语言
- 第一代:机器语言-二进制代码
- 第二代:汇编语言-助记符表示
- 第三代:高级语言
- 面向过程
- 面向对象
HelloWorld
public class HelloWorld{
//main方法是程序的入口
public static void main(String[] args){
//输出语句:System.out.println() - 先输出数据,然后换行
// 可以不向内添加数据-直接用作换行
// System.out.print() - 只输出数据
System.out.println("HelloWorld!");
}
}
class test{
}
//可以声明多个class,但只能有一个public修饰的类且public修饰了类必须与源文件名相同
- .java:Java代码
- javac+.java文件:编译生成class文件(字节码文件-文件名与.java中的类名相同)
- java+.class文件的名:运行
注释
- 单行注释://
- 多行注释:/*多行注释*/
- 文档注释:
/**
@author xxx
@version 8.0
hi
*/
javadoc helloworld.java
单行注释和多行注释-对程序进行解释说明|调试代码
文档注释-可以被JDK提供的工具javadoc解析,生成该程序的说明文档(网页形式)
关键字与保留字
- 关键字:具有特殊含义的字符串
- 保留字:以后可能具有特殊含义的字符串 | 可能会变成关键字的字符串
标识符
- 英文字母、数字、_、或$组成(可以使用汉字等Unicode字符,但不建议)
- 不能以数字开头
- 不可使用关键字或保留字
- 严格区分大小写,无长度限制
- 不能包含空格
变量类型
变量类型 变量名 = 值;
- byte short int long
- float double
- char
- boolean
- class(类) (包括字符串)
- interface(接口)
- [ ] (数组)
class Variable{
public static void main(String[] args){
//变量的定义,同一变量不可多次定义
int age = 12;
//变量的使用
System.out.println(age); //输出12
//变量赋值
age = 19;
/*
变量作用域一般为一个大括号内
*/
//int四字节-表示数字 | float 四字节 为 数+幂指数(10为底)
//float 精度不高,通常使用 double
float a = 1.234f; //float后加f标记类型
double b = 1.2345678; //精度是float两倍
char c = 'c'; //字符型--单引号-单字符(可以是转义字符或Unicode代码)
//布尔型
boolean d = true; //只能是true或false
String e = "Hello World!"; //字符串使用双引号
//可以与其他八种基本类型进行运算,结果是String类型
}
}
类型之间运算
'a' + 1; //字符转换为ascll码计算------97
byte a = 2;
int b = 12;
int c = a + b; //byte等与更大类型运算时,自动提升为更大类型(此处为int)
//int与float等-int自动转换为float等
//自动类型提升:byte、short、char->int->long->float->double
long d = 12.2323344;
int e = (int)d; //强制转换-可能导致精度损失
进制
int a = 0b1011; //0b或0B开头->二进制->8+2+1->11
int b = 013; //0开头->八进制->8+3->11
int c = 11; //十进制
int d = 0xb; //0x或0X开头->十六进制->1,2,3,4,5,6,7,8,9,a,b,c,d,e,f|不区分大小写->b对应十进制11
02-运算符与键盘输入
算术运算符
+,-,*,/ | 加减乘除 |
++,– | 自增,自减 |
% | 取模 |
int a = 10;
int b = 23;
a+b; //33
a-b; //-13
a*b; //230
a/b; //0--两个整数相除结果为整数-整除
a%b; //10-10除23得0余10
(a++)+(b++); //结果为33,a++的返回值为10,但返回之后a变为11,b++返回23然后b变为24
(++a)+(++b); //结果为37,a|b先自增为12|25,然后相加
//自增自减不会改变变量本身的类型,short类型自增还是short类型,但如果short类型变量加一则会变成int类型
short c = 3;
c++; //c为4,仍为short类型
//c = c + 1; //报错,此时c+1为int,而c为short
c = short(c + 1);
赋值运算符
= | 直接赋值 |
+= | a+=b; – a = a+b |
-+ | a-=b; – a = a-b |
*= | a*=b; – a = a*b |
/= | a/=b; – a = a/b |
%= | a%=b; – a = a%b |
int a = 10; //将值10赋给a
int b = a; //将a的赋给b
a += 2; //a = a + 2 --> a = 10 + 2 --> a = 12
//也不会改变数据类型
...
比较运算符
== | 两者相等 |
!= | 不等 |
>=,<=,>,< | 大于等于,小于等于,大于,小于 |
instanceof | 比较两个对象是否相同 |
int a = 8;
int b = 10;
a < b; //true
逻辑运算符
& | 逻辑与 |
| | 逻辑或 |
! | 逻辑非 |
^ | 逻辑异或 |
&& | 短路与 |
|| | 短路或 |
false&true; //逻辑与 false 虽然遇到了false,但依然会向后判断
true|false; //逻辑或 true 虽然遇到了true,但依然会向后判断
!true; //逻辑非 false
true^false; //逻辑异或 true 两边都为true或false,则结果为false,否则为true
false&&true; //短路与 false 遇到false即返回false,不往后看
true||false; //短路或 true 遇到true即返回true,不往后看
位运算符
<<,>> | 左移,右移 |
<<<,>>> | 无符号左移,无符号右移 |
& | 与运算 |
| | 或运算 |
^ | 异或运算 |
~ | 取反运算 |
System.out.println(~12); //取反
System.out.println(12&7); //按位与,比较二进制位,都为1才为1
System.out.println(12|7); //按位或,比较二进制位,都为0才为0
System.out.println(12^7); //按位异或,比较二进制位上的值,相同为0,异为1
//此处 12:00001100
// 7:00000111
//结果 : 00001011
System.out.println(3<<1); //左移,超出剔除,空位补零--移多了可能变为负数
System.out.println(4>>1); //右移,超出剔除,如果原来最高位为1,则空位补1,为0则补0
System.out.println(2>>>1); //无符号右移,无论被移位二进制最高位是0还是1,都用0补充
//异或
int a = 12;
int b = 34;
a = a ^ b;
b = a ^ b;
a = a ^ b;
//交换两个的值
三元运算符
(条件表达式) ? 语句1 : 语句2
int a = (1 < 2) ? 3 : 4; //1<2结果为true,a的值被赋为3(否则赋值为4)
键盘输入
import java.util.Scanner; //导入键盘输入相关类
class ...
public static void main(String[] args){
Scanner scan = new Scanner(System.in); //创建一个对象(System.in表示从系统输入)
int num = scan.nextInt(); //获取键盘输入的一个整数
String str = scan.next(); //获取字符串
double dou = scan.nextDouble(); //获取浮点数
boolean b = scan.nextBoolean(); //获取布尔类型
//获取单个字符
//先使用next()获取字符串类型,然后转化为字符型
String char1 = scan.next();
char char2 = char1.charAt(0); //获取char1索引为0的字符
}
03-条件控制与循环
条件控制
if-else语句
if(条件){条件为true是执行}else{条件为false执行}
int i = 1;
if(i == 1){i++;} //单个if
//是非2选1
if(i % 2 == 0){
System.out.println("偶数!");
}else{
System.out.println("奇数!");
}
//上面可以改写成三元运算符形式
System.out.println(i % 2 == 0 ? "偶数!" : "奇数!");
//if-else if -...-else,多重选择
if(i == 1){
...
}else if (i == -1){
...
}else{
...
}
switch
int num = 2;
switch(num){ //任何类型都可以
case:0
System.out.println("Zero");
break;
case:1
System.out.println("One");
break;
default: //相当于else
System.out.println("xxx");
}
for循环
for(int i = 0; i < 10; i++){ //三个分别为初始化语句1、循环条件2,迭代调价4
System.out.println(i); //循环体3
} //执行顺序:1 2 3 4 2 3 4 ... 4 2
for(int i = 0;i < 10; i++){
if(i % 5 == 0){
break; //跳出循环
}else{
continue; //结束本次循环,进入下一次循环
}
}
//代标签的break与continue-结束整个(本次)循环,跳往标签处继续执行
int count = 0;
co: for(int i = 1; i < 10; i++){
if(i % 5 == count){
continue co;
}
count++;
}
while循环
int i = 0; //相当于for循环的1
while(i < 10){ //相当于for循环的2
System.out.println(i); //相当于for循环的3
i++; //相当于for循环的4
}
do-while循环
int i = 0;
do{
System.out.println(i); //do-while先执行循环体才判断--即至少会执行一次循环体
}while(i < 10);
04-数组及简单算法
引用数据类型,但其元素既可以是基本数据类型也可以是引用数据类型
//int类型数组
int[] intarr; //目前只定义了类型,并未定义长度
//静态初始化-数组的初始化和数组元素的赋值操作同时进行
intarr = new int[]{11,22,33,44,55,66,77,88,99,100};
//动态初始化-数组的初始化和数组元素的赋值操作分开进行
String[] strs = new String[5]; //数组长度为5,数组元素类型为String-数组初始化
//获取指定位置的元素
intarr[0]; //数组中的第一个元素,下标为0 -> 值为11 ||数组下标不能越界
strs[0] = "hello"; //赋值
//获取数组长度
intarr.length; //.length为数组的属性 -> 表示数组的长度(数组初始化时定义的长度)
//遍历数组
for(int i = 0; i < intarr.length; i++){
System.out.println(intarr[i]);
}
//数组元素的默认初始化值
/*
整型 -> 初始值为0
浮点型 -> 0.0
字符型 -> 0或'\u0000',不是'0'
布尔型 -> false
引用类型-> null
*/
二维数组
int[][] arr2 = new int[3][4]; //限定了长度
int[][] arr3 = new int[][]{{1,2,3},{4,5},{6,7,8,9}}; //可以任意指定长度
//调用
arr3[0][1]; //2 ==> 第一个数组元素的第二个元素
//遍历
for(int i = 0; i < arr3.length; i++){
for(int j = 0; j < arr3[i].length; j++){
System.out.println(arr3[i][j]);
}
}
//初始值
arr2[0]; //[I@1a2a3412 [表示一维,I表示int类型数组,@后面接地址
arr; //[[I@3d4a567c
int[] arr4 = new int[]{1,2,3,4};
arr5 = arr4; //地址赋值----arr4和arr5指向的是同一个数组
简单算法
String strs = new String[]{"AA","BB","CC","DD","RR","SS","EE"};
//数组的复制
String str1 = new String[strs.length];
for(int i = 0; i < strs.length; i++){
str1[i] = strs[i];
}
//数组的反转
for(int i = 0; i < strs.length/2; i++){
String temp = strs[i];
strs[i] = strs[strs.length-i-1];
strs[strs.length-i-1] = temp;
}
//线性查找
String check = "RR";
for(int i = 0; i < strs.length; i++){
if(check.equals(strs[i])){ //.equals()---用于比较内容
System.out.println("元素位置为:"+i)
break;
}
}
//二分法查找-有序数组
int[] nums = new int[]{2,4,6,9,12,34,56,78,98};
int checknum = 12;
int head = 0; //初始首索引
int end = nums.length - 1; //初始尾索引
while(head <= end){
int middle = (head + end) / 2;
if(checknum == nums[middle]){
System.out.println("元素位置为:"+middle);
}else if(nums[middle] > checknum){
end = middle - 1;
}else{
head = middle + 1;
}
}
//排序
int[] arr = new int[]{34,2,35,15,32,82,51,25,98};
//冒泡排序
for(int i = 0; i < arr.length - 1; i++){
for(int j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//快速排序..(待补充)
常用方法
Array.equals(arr1,arr2); //判断两个数组是否相等
Array.toString(arr1); //输出数组信息
Array.fill(arr1,10); //将数组中全部填充10
Array.sort(arr1); //将数组排序
Array.binarySearch(arr1,15); //在数组中查找指定值,没找到返回负数