Java 基础-(第一天)

一、Java介绍

Java是一个面向对象编程的软件开发语言(JAVA SE、JAVA EE、JAVA ME)
特点:简单、健壮、安全、跨平台、高度优化的虚拟机(缺点:语法繁琐、无法操作硬件、GUI效果不佳)
健壮性:支持容错,抛出异常,可不影响程序的正常运行
可靠性:出错的几率低
JDK javac编译器(源码 java文件->字节码 class文件) java程序开发工具+JRE
JRE JVM+Runtime Library java程序运行的环境

二、程序结构

程序结构

[public] class 类名 { 
	[public] 返回值类型 [void]  方法名 (参数){
		执行语句;
		}
	}

注释符 //单行注释 /* */多行注释 /** */多行注释用于类和方法的说明

三、变量

变量 可以持有某个基本类型的数值或指向某个对象,必须先定义后使用的原则,可重新赋值。

变量类型 变量名 = 初始值;
四、数据类型

数据类型分为基本数据类型和引用类型(class类型)

整数类型 long(8字节) int(4字节) short(2字节) byte(1字节)   (long a = 1222L)
浮点类型 double(8字节) float(4字节)
布尔类型 boolean(1字节) (true false)
字符类型 char(2字节) (char s = 'a')
字符串类型 string (String str = "abc")

计算机内存的最小存储单元是字节,一个字节8位二进制数 0~255
二进制 0b 十六进制 0x

五、常量
final double PI = 3.14;  //final修饰符,不可再次赋值
六、整数运算
+、-、*、/(除法运算结果为整数)
++、--、+=、-=
% 取余数
计算结果超过范围不会报错
>>、<<、>>>(不带符号位)移位
^异或(相不同结果为1)、~非运算

强制转型丢失精度(int)

七、浮点数运算

很多浮点数无法精确表示,计算存在误差,整型可以自动提升到浮点数
24/5 结果为4,不能自动提升到浮点数,改为24.0/5或24/5.0
强制转型为整型会直接丢掉小数位,24.3和24.6强制转型为整型后的结果都是24,技巧为分别24.3+0.5和24.6+0.5
运算结果超过范围,结果为最大值

八、布尔运算
关系运算符 > >= < <= == !=
与运算 &&
或运算 ||
非运算 !

三元运算符 a? b:c a为true,结果为b,相反,结果为c。b和c的类型必须相同

九、字符和字符串
字符类型 char 是基本数据类型 char c = 'a' 保存一个字符,可以是一个英文字符‘a’或一个中文字符‘中’
java使用的是unicode编码表示字符  char c = '\u0041'  表示英文字符A
字符串类型 String  是引用类型  String s1 = "abc"  字符串不可变,指向非持有
字符串的连接通过 "ab"+ "cd" 结果为"abcd"

转义字符  \n \r \t \\ \"
空值 null 空字符串 “”是一个空字符串对象
十、数组类型

数组类型 是引用类型,多个元素有相同类型时,可使用数组表示

数组的定义 
int [] ns = new int[5] 其中new int[5] 初始化,大小不可改变,索引从0开始
int [] ns = new int[]{1,2,3}
十一、输入和输出
输出  
System.out.println("abc") ;
System.out.print("abc");

输入
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine(); 读取字符串
int age = scanner.nextInt();读取整数

格式化输出
System.out.printf("%5.2f \n",str1);   %是占位符
%d  %f %s %%(表示%本身)

System.out.printf("%2$s  %1$s  %3$s \n","a","b","c"); 输出结果为:b a c

String str2 = String.format("%4.2f",3.1415926);
十二、if判断

程序结构

if(条件1){
	执行语句1;
}
else if(条件2){
	执行语句2;
}
else {
	执行语句3;
}
浮点数用==判断是不靠谱
if(a==0.1)   使用if(Math.abs(a-0.1)<0.0001)

equals判断内容是否相等  a.equals(b)
如果a为null,会报错

引用类型判断是否指向同一个对象 ==
十三、switch语句

程序结构

switch(option){      option表达式
case 1: 执行语句1;break;   case具有穿透性
case 2: 执行语句2;break;
default: 执行语句3;break;
}
十四、while循环

程序结构

while(条件){
	执行语句;
	}
十五、dowhile循环

程序结构

do{
	执行语句;
	}while(条件);
十六、for循环

程序结构

for(初始值;条件判断;计算器){
	执行语句;
	}

for(;;) 死循环

for each循环

for(int i: ns){  ns为数组
	执行语句;
}
十七、break和continue

循环过程中,break跳出当前循环体,continue跳过本次循环

十八、遍历数组
int ns = {1,2,3,4};
System.out.println(ns); ns为JVM中的引用地址

for(int i =0;i <ns.length();i++){
	System.out.println(ns[i]);
}

for(int n:ns){
	System.out.println(n);
}

System.out.println(Array.toString(ns));快速打印数组中所有的元素
十九、数组排序

数组排序修改了数组本身

冒泡排序法 使用两层for循环
int[] ns = {3,1,4,5,2};
for (int i = 0; i < ns.length; i++) {
            for (int j = i+1; j < ns.length; j++) {
                if (ns[i]>ns[j]) {
                    int temp = ns[j];  两个变量交换值通过中间变量
                    ns[j] = ns[i];
                    ns[i] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(ns));

Arrays.sort(ns) 大数组采用快速排序,小数组采用冒泡排序
System.out.println(Arrays.toString(ns));
二十、多维数组

二维数组

int[][] ns ={
{1,2,3},
{4,5,6},
{7,8,9}
}

System.out.println(Arrays.deepToString(ns)); 快速打印多维数组
二十一、命令行参数

命令行参数String[] args就是一个String[]数组