JAVA基础知识——基础程序设计结构(详细整合版)
1、变量定义及类型
变量:用来命名一个数据的标识符
变量类型:
2、操作符
3、控制流程
-
条件判断
if语句
if(布尔表达式) { //如果布尔表达式为true将执行的语句 }
if—else语句
if(布尔表达式){ //如果布尔表达式的值为true }else{ //如果布尔表达式的值为false }
if多条件判断语句
if(布尔表达式 1){ //如果布尔表达式 1的值为true执行代码 }else if(布尔表达式 2){ //如果布尔表达式 2的值为true执行代码 }else if(布尔表达式 3){ //如果布尔表达式 3的值为true执行代码 }else { //如果以上布尔表达式都不为true执行代码 }
-
switch case 语句
相当于 if else的另一种表达方式,判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
switch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意数量的case语句 default : //可选 //语句 }
-
循环结构
while循环,条件为true时 重复执行
while( 布尔表达式 ) { //循环内容 }
do...while循环,条件为true时 重复执行,至少会执行一次
do { //代码语句 }while(布尔表达式);
for循环,和while一样,只是表达方式不一样
for(初始化; 布尔表达式; 更新) { //代码语句 }
增强for循环
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
for(声明语句 : 表达式) { //代码句子 }
continue关键字(继续下一次循环)
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
break关键字(结束循环)
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
4、数字与字符串
-
封装类
在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类 Number 的子类。
-
装箱与拆箱
这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。
public static void main(String[] args) { int i = 5; //装箱基本类型转换成封装类型 Integer it = new Integer(i); //拆箱封装类型转换成基本类型 int i2 = it.intValue(); //自动转换就叫装箱 Integer it2 = i; //自动转换就叫拆箱 int i3 = it; }
-
Math类
提供了一些常用的数学运算的属性和方法,如初等指数、对数、平方根和三角函数,并且都是以静态方法的形式存在
public static void main(String[] args) { float f1 = 5.4f; float f2 = 5.5f; //5.4四舍五入即5 System.out.println(Math.round(f1)); //5.5四舍五入即6 System.out.println(Math.round(f2)); //得到一个0-1之间的随机浮点数(取不到1) System.out.println(Math.random()); //开方 System.out.println(Math.sqrt(9)); //次方(2的4次方) System.out.println(Math.pow(2,4)); //π System.out.println(Math.PI); //自然常数 System.out.println(Math.E); }
-
Character 类
char对应的封装类是Character,Character 类用于对单个字符进行操作。
public static void main(String[] args) { char c1 = 'a'; Character c = c1; //自动装箱 c1 = c;//自动拆箱 //Character常见方法 System.out.println(Character.isLetter('a'));//判断是否为字母 System.out.println(Character.isDigit('a')); //判断是否为数字 System.out.println(Character.isWhitespace(' ')); //是否是空白 System.out.println(Character.isUpperCase('a')); //是否是大写 System.out.println(Character.isLowerCase('a')); //是否是小写 System.out.println(Character.toUpperCase('a')); //转换为大写 System.out.println(Character.toLowerCase('A')); //转换为小写 String a = 'a'; //不能够直接把一个字符转换成字符串 String a2 = Character.toString('a'); //转换为字符串 }
-
String 类
在Java中,字符串是一个类,所以我们见到的字符串都是对象,Java 提供了 String 类来创建和操作字符串。
public static void main(String[] args) { String str1 ="Hello"; //字面值,虚拟机碰到字面值就会创建一个字符串对象 String str2 = new String("world"); //创建了两个字符串对象 char[] c1 = new char[]{'N','I','C','E'}; String str3= new String(c1);// 通过字符数组创建一个字符串对象 String str4 = str1 + str2;// 通过+加号进行字符串拼接 int len = str1.length();//求str1的长度 //三种连接字符串的方式 str1.concat(str2); "Hello ".concat("world"); String str = "Hello" + " world" + "!"; //格式化输出 int year = 2020; //直接打印数字 System.out.format("%d%n",year); //总长度是8,默认右对齐 System.out.format("%8d%n",year); //总长度是8,左对齐 System.out.format("%-8d%n",year); //总长度是8,不够补0 System.out.format("%08d%n",year); //千位分隔符 System.out.format("%,8d%n",year*10000); //小数点位数 System.out.format("%.2f%n",Math.PI); //不同国家的千位分隔符 System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000); System.out.format(Locale.US,"%,.2f%n",Math.PI*10000); System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000); }
字符串操作
public static void main(String[] args) { String sentence = "Hello, world !"; char c = sentence.charAt(0);//charAt(int index)获取指定位置的字符 char[] cs = sentence.toCharArray(); //获取对应的字符数组 String subString1 = sentence.substring(3);//截取从第3个开始的字符串 String subString2 = sentence.substring(3,5);//截取从第3个开始到第5个结束的字符串 String subSentences[] = sentence.split(",");//根据,进行分割,得到3个子字符串 sentence.trim(); //去掉首尾空格 sentence.toLowerCase();//全部变成小写 sentence.toUpperCase();//全部变成大写 sentence.indexOf('l');//字符第一次出现的位置 sentence.lastIndexOf("world");//字符串最后出现的位置 sentence.indexOf(',',3);//从位置3开始,出现的第一次,的位置 sentence.contains("Hello");//是否包含字符串"Hello" sentence.replaceAll("Hello", "Hi");//替换所有的 sentence.replaceFirst(",","");//只替换第一个 }
字符串比较
public static void main(String[] args) { String str1 = "the light"; String str2 = new String(str1); String str3 = "the light"; System.out.println( str1 == str2);//==用于判断是否是同一个字符串对象 System.out.println(str1.equals(str2));//使用equals进行字符串内容的比较,必须大小写一致,完全一样返回true System.out.println(str1.equalsIgnoreCase(str3));//忽略大小写的比较 // 是否以子字符串开始或者结束 System.out.println(str1.startsWith(start));//以...开始 System.out.println(str1.endsWith(end));//以...结束 }
-
StringBuffer 类
当对字符串进行修改的时候,需要使用 StringBuffer 类。
和 String 类不同的是,StringBuffer 类的对象能够被多次的修改,并且不产生新的未使用对象。
5、数组
-
一维数组
public static void main(String[] args) { // 声明一个数组 int[] arg;//还可以写成int arg[];注意这里只是声明,不会创建数组 //创建数组 arg = new int[5];//用new创建一个长度是5的数组,并且使用引用arg指向该数组 int[] b = new int[5]; //声明的同时,指向一个数组 //分配空间,赋值 arg[0]= 1; //赋值,下标0,代表数组里的第一个数 int[] aa = new int[]{100,102,444,836,3236};//写法一: 分配空间同时赋值 int[] cc = {100,102,444,836,3236}; //写法二: 省略了new int[],效果一样 //数组长度 System.out.println(arg.length); //打印数组的长度 (.length属性用于访问一个数组的长度) for(int element: arg)//加强型循环,它能在不使用下标的情况下遍历数组 { System.out.println(element); } //复制字符串 //arraycopy(src, srcPos, dest, destPos, length) //src: 源数组 //srcPos: 从源数组复制数据的起始位置 //dest: 目标数组 //destPos: 复制到目标数组的启始位置 //length: 复制的长度 System.arraycopy(arg, 0, b, 0, 3); }
-
多维数组:
可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
-
Arrays类
java.util.Arrays类常用方法
public static void main(String[] args) { int arr[] = new int[] { 18, 62, 68, 82, 65, 9 }; int arr2[] = new int[] { 18, 62, 68, 82, 65, 8 }; String content = Arrays.toString(arr);//直接把一个数组,转换为字符串 Arrays.sort(arr);//通过 sort 方法,按升序 Arrays.binarySearch(arr, 62);//对排序好的数组进行二分查找法操作 Arrays.equals(arr,arr2);//比较数组中元素值是否相等 Arrays.fill(arr, 5);//使用同一个值,填充整个数组 }
6、日期
java.util 包提供了 Date 类来封装当前的日期和时间
时间原点:在计算机里,会用一个数字来代替。那么最特殊的一个数字,就是零. 零这个数字,就代表Java中的时间原点,其对应的日期是1970年1月1日 8点0分0秒 。 (为什么是8点,因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个小时)。为什么对应1970年呢? 因为1969年发布了第一个 UNIX 版本:AT&T,综合考虑,当时就把1970年当做了时间原点。所有的日期,都是以为这个0点为基准,每过一毫秒,就+1。
public static void main(String[] args) { Date d1 = new Date();//当前时间 Date d2 = new Date(5000); // 从1970年1月1日 早上8点0分0秒 开始经历的毫秒数 d1.getTime();//getTime() 得到一个long型的整数,这个整数代表 1970.1.1 08:00:00:000,每经历一毫秒,增加1 System.currentTimeMillis();//通过System.currentTimeMillis()获取当前日期的毫秒数 SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");//使用 SimpleDateFormat 格式化日期 ft.format(d1); }
7、修饰符
-
访问控制修饰符
Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。
default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
public : 对所有类可见。使用对象:类、接口、变量、方法
protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
-
非访问修饰符
static 修饰符,用来修饰类方法和类变量。
final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
abstract 修饰符,用来创建抽象类和抽象方法。
synchronized 和 volatile 修饰符,主要用于线程的编程。
整理参考之前学习的两个网站
https://www.runoob.com/java/java-tutorial.html