文章目录
一、注释
1.单行注释
//单行注释内容
2.多行注释
/*
多行
注释
内容
*/
3.文档注释
/**
@author 指定java程序的作者
@version 指定源文件的版本
*/
二、程序开发步骤
1.编译
javac filename.java => classname.class (字节码文件)
2.运行
java classname
三、变量、基本数据类型、运算符
1.变量声明
class Variable{
public static void main(String[] args){ //main()是程序的入口
int age = 10; // 声明赋值
int id;
id = 5;
System.out.println(age);
}
}
2.数据类型
2.1数据类型分类
2.2基本数据类型间计算
自动类型提升:容量小的与容量大运算时,结果自动提升为容量大的类型。其中,容量大小值表示表示数的范围大小,eg:float的容量大于long的容量
byte -> short -> int -> long -> float -> double
特别的,byte,short,char 做运算,结果为int
强制类型转换:自动提升运算逆运算
1. 使用强转符 ()
2. 可能造成精度损失
3. 整型常量默认为int,浮点型常量默认为double型
class Variable{
public static void main(String[] args){
double a = 12.2;
int b = (int)a ; // 将double类型强转为int类型,截断操作
char c = '' // 编译不通过
char d = ' ' // char类型有且只有一个字符
}
}
2.3字符串的运算操作
字符串可以8种基本数据类型运算,且运算只能连接运算 : “+”,运算结果仍然为String类型
class StringTest{
public static void main(String[] args){
String name = "lee"
int number = 1000
String match = name + number // + 连接运算
System.out.println(match) // lee1000
}
}
3.运算符
3.1 算术运算符:
% 取模(取余)结果符号与被模数相同;
++ 自增(不改变变量类型);
前++ : 先自增,再运算
int a = 10;
int b = ++a; => a = 11 , b = 11后++ : 先运算,后自增
int a = 10;
int b = a++; => b = 10 , a =11
– 自减
前-- : 先自减,后运算
后-- : 先运算,后自减
3.2赋值运算符
赋值运算符: = ,+= , -= , *= ,%= (不改变数据类型)
class SetValue{
public static void main(String[] args){
int a , b;
a = b = 10;
System.out.println("a = " + a + "b = " + b);
// a++ <=> a += 1
}
}
3.3比较运算符
== , <= , … , instanceof :检查是否是类的对象
3.4逻辑运算符
&,&& 与;|,|| 或;!非 ;^ 异或(异=>true)
&(与) &&(短路与)
相同点:
1.运算结果相同
2.当符号左边为true,二者都执行符号右边运算
不同点:
当符号左边为false,&&不再执行符号右边运算,&继续执行>右边运算
| 与 ||
相同点:
1.结果相同
2.当符号左边为false时,都执行右边运算
不同:
符号左边为true时,|继续执行右边运算,而||不再执行
开发推荐短路(&&)与短路或(||)
四、三元运算符
- 表达式1 表达式2 要求一致
- 可以嵌套使用
class TriTest{
public static void main(String[] args){
int m = 10;
int n = 20;
// (条件表达式)?表达式1:表达式2 => true 表达式1,false 表达式2
int maximum = (m<n)?n:m;
System.out.println("maximum is " + maximum);
int a = 10;
int b = 20;
int c = 30;
int maximum2 = (a>b)?((a>c)?a:c):((b<c)?c:b);
}
}
五、流程控制
顺序结构
分支结构
循环结构
//排序从小到大输出(if else 嵌套)
class SortTest{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("input first number ");
int num1 = scanner.nextInt();
System.out.println("input second number ");
int num2 = scanner.nextInt();
System.out.println("input third number ");
int num3 = scanner.nextInt();
if(num1 >= num2){
if(num3 < num2){
System.out.println(num3 + "," + num2 + "," + num1);
}else if(num3>num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}else{
if(num3<num1){
System.out.println(num3 + "," + num1 + "," + num2);
}else if(num3>num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
}
}
}
}
// switch-case
// swith后跟 byte,short,char,int,枚举类型,String,6种类型
class SwitchCaseTest{
public static void main(String[] args){
int num = 2;
switch(num){
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2 :
System.out.println("two");
break;
default:
System.out.println("others");
}
}
}
//for
// EG: 遍历100以内偶数
class ForTest{
public static void main(String[] args){
for(int i=0;i<=100;i++){
if(i % 2 == 0 ){
System.out.println(i);
}else{
System.out.println("odd!");
}
}
}
}
// 21. while
class WhileTest{
public static void main(String[] args){
int i=2;
while(i<=10){
System.out.print(i);
i++;
}
}
}
// do-while
do{
}while();
六、数组
1.一维数组
class ArrTest{
public static void main(String[] args){
int[] arr = new int[]{1,2,3,4,5}; // 静态声明
int[] arr2 = new int[5]; // 动态声明
}
}
2.二维数组
class TwiDimArr{
public static void main(String[] args){
int[][] arr1 = new int[3][1]; // 动态声明
int[][] arr3 = new int[][]{{1,1,2},{2}}; // 静态声明
int[][] arr4 = new int[4][]; // 动态声明
}
}
3.默认值
int[][] arr = new int[3][2]
外层 arr[0] => 地址值
内层 arr[0][0] => 与一维数组默认值相同(0)
int[][] arr1 = new int[4][]
外层 arr[0] => null
内层 arr[0][0] => 无法调用,报错
class ArraysTeat{
public static void main(String[] args){
// 1. boolean equals(int[] a, int[] b) => 判断两个数组是否相等
// ps: char对比 'a' == 'b' ; String 对比 "abc".equals("bacd")
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{2,3,4,5};
boolean isEquals = Arrays.equals(arr1,arr2);
// 2. String toString(int[] a) => 输出数组信息
System.out.println(Arrays.toString(arr1));
// 3. void fill(int[] a,int val) => 指定值填充到数组中
Arrays.fill(arr1,10); // =>{10,10,10,10}
// 4. void sort(int[] a) => 排序
Arrays.sort(arr2);
// 5. int binarySearch(int[] a,int key)
int[] arr3 = new int[]{1,2,3,4,5};
Arrays.binarySearch(arr3,5); // => 返回索引值
}
}
//数组复制 反转
class ArrayTest{
public static void main(String[] args){
String[] arr = new String[]{"JJ","AA","BB","TT"};
// 数组的复制
String[] arr_copy = new String[arr.length]
for(int i=0;i<arr.length;i++){
arr_copy[i] = arr[i] ;
}
// 数组的反转
// 方法一
for(int i=0;i<arr.length/2;i++){
String temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
// 方法二
for(int i=0,j=arr.length-1;i<j;i++,j--){
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 查找
String obj = "BB";
boolean isFlag = true;
for(int i=0;i<arr.length;i++){
if(arr[i].equals(obj)){
System.out.println("find the word !");
isFlag = false;
break;
}
}
if(isFlag){
System.out.println("not find ");
}
// 二分查找
// 前提:所要查找的数组需要有序
int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int obj = -34;
int start = 0;
int end = arr2.length-1;
notFund = true;
while(start<=end){
int middle = (start+end)/2;
if(middle == obj){
notFund = false;
System.out.println("find the number , the index is " + middle);
break;
}else if(middle<obj){
start = middle + 1;
}else if(middle>obj){
end = middle -1 ;
}
}
if(notFund){
System.out.println("not find the number ");
}
}
4.数组常见异常
- 数组角标越界异常 ArrayIndexOutOfBoundsException
- 空指针异常 NullPointerException