学习笔记01
两年前学的Java,现在已经忘得差不多了,跟着狂神说Java的视频从头开始学,希望能救一救ww
一、JDK JRE JVM
1. JDK
java development kit
2. JRE
java Runtime Environment
3. JVM
java virtual machine
二、java代码编写
public class Hello{//类
    public static void main(String[] args){//main方法
        System.out.println("Hello World!");//输出
    }
}
三、java程序运行机制
- 
编译型 一下子全部编译完成,对操作系统要求低,c,c++ 
- 
解释型 一点一点解释/编译, java源文件通过javac命令预编译为class文件 
四、idea
1. IDE
集成开发环境
2. 安装
参考
五、Java基础语法
1. 注释 标识符 关键字
1. 注释
注释是一个非常好的习惯
2. 关键字

3. 标识符
标识符不能使用关键字,且大小写敏感,能用中文但不推荐。
2. 数据类型
1. 强类型语言
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用(安全性高)
java c++
2. 弱类型语言
3. Java的数据类型分为两大类
- 基本类型
- 数值类型
- boolean类型
 
        //八大基本类型
        int num1 = 10;//4字节
        byte num2 = 20;//1字节
        short num3 = 30;//2字节
        long num4 = 30L;//8字节 Long类型要在数字后面加L
        //小数:浮点数
        float num5 = 50.1F;//4字节
        double num6 = 3.1415936535;//8字节
        //字符
        char name = 'A';//2字节
        //字符串 String 不是关键字,而是类
        String namea = "tyrantblue";
        
        //布尔值
        boolean flag = true;//占1位,8位等于1字节
        //boolean flag1 = false;
类型扩展
public class Demo03 {
    public static void main(String[] args) {
        //整数拓展: 进制 二进制0b 十进制 八进制0 十六进制x
        int i = 10;
        int i1 = 010;
        int i2 = 0x10;
        int i3 = 0b10;
        System.out.println(i);
        System.out.println(i1);
        System.out.println(12);
        System.out.println(i3);
        System.out.println("===================================================");
        //浮点数拓展:    银行业务如何表示?
        //BigDecimal
        //======================================================================
        //float 有限  离散  舍入误差    大约  接近但不等于
        //double
        //最好避免完全使用浮点数去比较
        //最好避免完全使用浮点数去比较
        //最好避免完全使用浮点数去比较
        float f = 0.1f;//0,1
        double d = 0.1;//0.1
        System.out.println(f==d);//false
        float d1 = 23475932458739475384f;
        float d2 = d1 + 1;
        System.out.println(d1==d2);//true
        //=============================================================
        //字符拓展
        //=============================================================
        System.out.println("===================================================");
        char c1 = 'a';
        char c2 = '中';
        System.out.println(c1);
        System.out.println((int)c1);
        System.out.println(c2);
        System.out.println((int)c2);
        
    }
}
遇到了输出中文乱码的问题,参考这篇文章解决了
所有的字符本质都是数字,存在一个Unicode表,占两字节,用\u来转义
		//转义字符
        //  \t  制表符
        //  \n  换行符
        //  ......
        System.out.println("Hello world!");
        System.out.println("===================================================");
        String sa = new String("hello world");
        String sb = new String("hello world");
        System.out.println(sa==sb);//false
        String sc = "hello world";
        String sd = "hello world";
        System.out.println(sc==sd);//true
        //对象 从内存分析
        //布尔值扩展
        boolean flag = true;
        if(flag==ture){}//新手
        if (flag){}//老手
        //Less is more! 代码要精简易读
- 引用类型
- 类
- 接口
- 数组
 
4. 类型转换
- 
由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换 由低到高 byte, short, char->int->long->float->double 
- 
运算中,不同类型的数据先转化为同一类型,然后进行运算。 
- 
小数的优先级一定大于整数 
public class Demo05 {
    public static void main(String[] args) {
        int i = 128;
        byte b = (byte)i;//内存溢出,byte大小为2字节
        System.out.println(b);//-128
        //强制类型转换    (类型)变量名 高-->低
        //自动转换转换    低-->高
        /*
        注意点:
        1. 不能对布尔类型进行转换
        2. 不能把对象类型转换为不相干的类型
        3. 在把高容量转化为低容量时,用强制转换
        4/ 转换的时候可能存在内存溢出,或者精度问题!!!
        */
        System.out.println("======================================");
        System.out.println((int)23.7);//23
        System.out.println((int)-45.89f);//-45
        System.out.println("======================================");
        char c = 'a';
        int d = c+1;
        System.out.println(d);//98
        System.out.println((char)d);//b
    }
}
- 溢出的一些问题
public class Demo06 {
    public static void main(String[] args) {
        //操作比较大的数时,注意溢出问题
        //JDK7的新特性(我已经更到JDK19了(= = ) 数字之间可以用下划线分割
        int money = 10_0000_0000;
        int years = 23;
        int total = money*years;//1525163520, 已经溢出了
        System.out.println(total);
        long total2 = money*years;//1525163520, 溢出了再转换没有用
        System.out.println(total);
        long total3 = money*(long)years;//23000000000,先转换为long类型就不会溢出
        System.out.println(total3);
    }
}
3. 变量 常量
1. 变量
- 变量就是可以变化的量
- Java是一种强类型语言,每个变量都必须声明其类型
- Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域
type varName [=value] [{,varName[=value]}];
//数据类型 变量名 = 值 ; 可以使用逗号隔开来声明多个同类型变量
- 注意事项:
- 每个变量都有类型,类型可以是基本类型,也可以是引用类型
- 变量名必须是合法的标识符
- 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
public class Demo07 {
    public static void main(String[] args) {
        //int a=1,b=2,c=3;不建议一行定义多个变量   //注意程序可读性
        int a=1;
        int b=2;
        int c=3;
        String name = "tyrantblue";
        char x = 'X';
        double pi = 3.14;
    }
}
2. 变量作用域
- 类变量
- 实例变量
- 局部变量
public class Demo08 {
    //属性:变量
    //实例变量:从属于对象;如果不初始化,会赋为这个类型的默认值 0或0。0
    //布尔值默认值为false
    //除了基本类型,其余默认值为null
    String name;
    int age;
    //类变量 static
    static double salary = 2500;
    //main方法
    public static void main(String[] args) {
        //局部变量:必须声明和初始化值
        int i = 10;
        System.out.println(i);
        //变量类型 变量名字 = new Demo08();
        Demo08 demo08 = new Demo08();
        System.out.println(demo08.age);
        System.out.println(demo08.name);
        //类变量 static
        System.out.println(salary);
    }
    
    //其他方法
    public void add(){
        //System.out.println(i);
        //不能输出
    }
}
3. 常量
- 常量是初始化后不能再改变的值,是不会变动的值
- 常量可以理解为一种特殊的变量,它的值被设定后,在程序运行的过程中不允许被改变
- 常量名一般使用大写字符
public class Demo09 {
    //修饰符不存在先后顺序
    //final 常量名=值;
    static final double PI = 3.14;
    public static void main(String[] args) {
        System.out.println(PI);
    }
}
4. 变量的命名规范
- 所有变量、方法和类名要见名知意
- **类成员变量:首字母小写和驼峰原则:moonthSalary 除了第一个单词外后面的单词首字母大写 **
- 局部变量:首字母小写和驼峰原则
- 常量:使用大写字母和下划线
- 类名:首字母大写和驼峰原则:Man,GoodMan
- 方法名:首字母小写和驼峰原则:run(), runRun()
4. 运算符
- java语言支持如下运算符
- 算数运算符: +, -, *, /, %, ++, --
- 赋值运算符: =
- 逻辑运算符: >, <, >=, <=, ==, !=, instanceof
- 位运算符: &&, ||, !
- 条件运算符: &, |, ^, ~ ,>>, <<, >>>
- 扩展赋值运算符: +=, -=, *=, /=
1. 算数运算符
package operator;
//二元运算符
public class Demo01 {
    public static void main(String[] args) {
        //Ctrl + D :复制当前行到下一行
        int a = 10;
        int b = 10;
        int c = 10;
        int d = 10;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b);
        System.out.println(a / b);
    }
}
2. 算数运算符拓展
package operator;
public class Demo02 {
    public static void main(String[] args) {
        long a = 12312414353523142L;
        int b = 123;
        short c = 10;
        byte d = 8;
        System.out.println(a+b+c+d);//Long
        System.out.println(b+c+d);//Int
        System.out.println(c+d);//Int
        //有Long那么一定是Long,有Double一定是Double
        //其他有无int结果都是int
    }
}
3. 关系运算符
package operator;
//关系运算符返回的结果:   正确 or 错误 用boolean
public class Demo03 {
    public static void main(String[] args) {
        //if
        int a = 10;
        int b = 20;
        int c = 41;
        System.out.println(a > b);//false
        System.out.println(c > b);//true
        //取余运算符 % 求模
        System.out.println(b % a);//0
        System.out.println(c % a);//1
    }
}
4. 自增自减
package operator;
//++ -- 自增,自减   一元运算符
public class Demo04 {
    public static void main(String[] args) {
        int a = 3;
        int b = a++;//先赋值后自增
        //a++ ==> a=a+1,
        System.out.println(a);//4
        int c = ++a;//先自增后赋值
        //++a ==> a=a+1
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        //幂运算2^3 2*2*2 = 8
        double pow=Math.pow(2, 3);
        System.out.println(pow);
    }
}
5. 逻辑运算符
package operator;
//逻辑运算符
public class Demo05 {
    public static void main(String[] args) {
        //与(and) 或(or) 非(取反)
        boolean a = true;
        boolean b = false;
        System.out.println("a && b: "+ (a&&b));//逻辑与运算,两个都为真结果才为true
        System.out.println("a || b: "+ (a||b));//逻辑或运算,两个有一个为真结果就为true
        System.out.println("!(a && b): "+ !(a&&b));//假变真,真变假
        //短路运算
        int c = 5;
        boolean d = (c<4)&&(c++<4);//如果前面已经短路后面就不会执行
        System.out.println(c);//5
        System.out.println(d);//false
    }
}
6. 位运算
package operator;
public class Demo06 {
    public static void main(String[] args) {
        /*
        A = 0011 1100
        B = 0000 1101
        A&B = 0000 1100
        A|B = 0011 1101
        A^B = 0011 0001//      异或:相同为0,不同为1
        ~B = 1111 0010
        2*8 = 16怎么运算最快?
        << >>左移右移
        << 左移代表*2
        >> 右移代表/2
        0000 0000   0
        0000 0001   1
        0000 0010   2
        0000 0100   4
        0000 1000   8
        0001 0000   16
        */
        System.out.println(2<<3);//16
    }
}
7. 扩展运算符
package operator;
public class Demo07 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a+=b;//a = a + b;
        a-=b;//a = a - b;
        System.out.println(a);//10
        //字符串连接符 + ,String在 + 前面,后面的都会转换成String进行连接
        //String在 + 后面,前面会进行算数运算
        System.out.println(""+a+b);//1020
        System.out.println(a+b+"");//30
    }
}
8. 三元运算符
package operator;
public class Demo08 {
    public static void main(String[] args) {
        // x ? y : z
        //如果x==true, 则结果为 y, 否则结果为 z
        //必须掌握,可以让代码更加精简
        int score = 80;
        String type = score < 60 ? "不及格":"及格";//及格
        System.out.println(type);
    }
}
这里遇到了控制台输出中文全是问号的情况,应该是编码的问题,但试过了网上的方法都不太行,最后解决方法是将jdk换回以前的版本,我之前的jdk版本为19,换回jdk1.8然后再把编码调成UTF-8.
- 优先级用括号更加清楚明了
5. 包机制
- 包的本质就是文件夹
- 一般利用公司域名倒置作为包名
遇到了空包直接折叠的情况,解决方法为Project右边的设置,取消勾选Compact Middle PacKages
- 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用”import“语句可以完成此功能
import com.xxx.xxx;
import com.xxx.*;//*是通配符,代表导入该包下所有的类
package语句要在代码最前面
尽量不要让包里面的名字重复
6. JavaDoc
- Javadoc命令是用来生成自己API文档的
- 控制台生成如下
D:\Code\java\javaSE\基础语法\src\com\tyrantblue\base>javadoc -encoding UTF-8 -charset UTF-8 Doc.java
- 如何用idea生成javadoc
参考如下
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号