搭建环境

- 安装JDK
- 安装IDEA 
- 配置环境变量 JAVA_HOME , Path
- cmd 中,输入 java -version 查看Java 是否成功安装

Java 基础

1. 8个基本类型

- byte,short,int,float,long,char,boolean
- char unicode 字符, “A” , “中”
- short、 char 或者 byte他会自动转换为int

2. 自增,自减

- a++ 先取值,后+1
- ++a 先+1, 后取值
int a = 5;
System.out.println("a++输出a:" + (a++));
System.out.println("++a输出a:" + (++a));
a++输出a:5
++a输出a:7

3. 二进制移位

- a<<2 向左移位
- a>>2 向右移位
// 十进制数字2向左移3位 即 二进制的10向左移3位即10000 转换为十进制为2的4次方 即16
System.out.println("2向左移三位:" + (2 << 3));
System.out.println("7向左移一位:" + (7 << 1));
System.out.println("7向右移一位:" + (7 >> 1));
2向左移三位:16
7向左移一位:14
7向右移一位:3

4. 三元运算符

- b? X : Y   判断b是否为true , 若为true , 取第一个 X值,false 取第二个Y值

5. 引用类型 String

- 引用类型会在内存存储地址和值
-  String s1 = "  "  -> 有内存,有地址
- String s1 = null  -> 没有内存,有地址
-  如果要输入标点符号,需要转移字符:  \
- System.out.println("\\n");
\n
比较引用类型,不能用 "== " , 用equal

equals是判断两个变量或者实例指向同一个内存空间的值是不是相同

而==是判断两个变量或者实例是不是指向同一个内存空间

举个通俗的例子来说,==是判断两个人是不是住在同一个地址,而equals是判断同一个地址里住的人是不是同一个

字符串相加
  • 方法一 :此方法会生成很多空间
String a1 = "aaa";
 String b1 = "bbb";
String c = a1 + b1;
System.out.println(c);
  • 方法二 :使用StringBuilder

String是Java中基础且重要的类,并且String也是Immutable类的典型实现,被声明为final
class,除了hash这个属性其它属性都声明为final,因为它的不可变性,所以例如拼接字符串时候会产生很多无用的中间对象,如果频繁的进行这样的操作对性能有所影响。
StringBuffer就是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类,提供append和add方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个线程安全的可修改的字符序列,把所有修改数据的方法都加上synchronized。但是保证了线程安全是需要性能的代价的。
StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。

StringBuilder S = new StringBuilder();
S.append(a1).append(b1);
System.out.println(S);
aaabbb
String提供了一系列的方法
  • charAt: 获取指定位置字符
  • indexOf :查找字符
  • split: 字符串分割
  • format: 格式化字符串

6. 数组

  • 声明数组的语法:
1. int a[]
2. int[] a
- 长度: a.length
- 下标:  a[0]

Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能

  • Arrays.fill : 填充
  • Arrays.sort :升序排序
  • Arrays.copyOfRange: 数组复制

7. 输入,输出

  • 输入
import java.util.Scanner;
public class demo2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入:");
        #方法一
        String a = input.nextLine();
        System.out.println(a);
    }
}
#方法二
if(scanner.hasNext()){
    //使用next方法接受
    String str = scanner.next();//程序会等待用户输入完毕
    System.out.println("输出的内容为:"+str);
}

Scanner类next() 方法和nextLine() 方法的区别
next():
一定要读取到有效字符后才可以结束输入
对输入有效字符之前遇到的空白,next() 方法会自动将其去掉
只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
next() 不能得到带有空格的字符串
nextLine():
以Enter为结束符,也就是说,nextLine() 方法返回的是输入回车之前的所有字符
可以获得空格符

8.流程控制语句

分类:
顺序结构
选择结构 : if语句 switch语句
循环结构

1. if 语句
if(比较表达式) {
  语句体;
 }
 // 执行流程:先计算比较表达式的值,看其返回值是true还是false。
 //  如果是true,就执行语句体; 如果是false,就不执行语句体;
if(比较表达式) {
 语句体1;
 }else{
语句体2;
 }
 //首先计算比较表达式的值,看其返回值是true还是false。
// 如果是true,就执行语句体1;如果是false,就执行语句体2;
if(比较表达式1) {
语句体1;
 }elseif(比较表达式2) {
 语句体2;
}elseif(比较表达式3) {
 语句体3;
 }
2.switch语句
switch语句格式:
switch(表达式) {
 case值1:
	 语句体1;
	 break;
 case值2:
	语句体2;
	 break;
	   ...
default:
	 语句体n+1;
	 break;
 }
- 表达式: 整型,字符型,字符串型
 byte,short,int,char  
 short、 char 或者 byte他会自动转换为int的
 
1.  case:后面跟的是要和表达式进行比较的值
2.  break: 必须存在每个case下, 表示中断,结束的意思,可以控制switch语句的结束。
2. default: 可以省略,但是不建议.可以在任意位置。但是建议在最后。
当所有的值都和表达式不匹配的时候,就执行default控制的语句。其实它就相当于if语句的else。
3. while 语句
while(循环条件){
    循环操作;
}
do {
    循环操作
} while(循环条件);
1. while先判断后执行,do while先执行后判断
2. 当不满足循环条件时,while循环一次都不会执行,do while循环至少执行一次
while(true) {
    语句; 
      if(条件式) 
          break;  // 跳离循环
       ...
}
当条件式成立时,会执行break离开while循环,这个break与switch中的作用是一样
4. for 循环
for(定义初始变量;循环条件;变量变化){
循环语句
}
4. foreach 循环

foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元素时,无需获得数组和集合长度,无需根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素

for(type variableName : array|collection){
//  数据类型 : 循环数组,集合
}