JavaStudy 入门-基础语法(Day03 - Day05)

【Java语言基础】
* 标识符
* 关键字
* 字面值
* 变量
* 数据类型
* 二进制
* 字符编码
* 运算符
* 控制语句
* 方法

一、 标识符(黑色/可自定义处)

(一)起名规则:

  1. 不可用数字开头
  2. 可: $、_ 、字母、数字
  3. 区分大小写

(二)规范

  1. 见名知义为佳
  2. 不要太长
  3. 方法和变量起名, 采用小驼峰命名法, 如: firstName
  4. 类和接口起名, 采用大驼峰命名法, 如: GoodStudent
  5. 常量名全部大写

二、字面值

即数据, 类型有:

boolean: 1字节 false和true

数字: int 4 double 8

字符串: 双引号, “ABC”

字符: char 2, 单引号, ‘A’

三、变量

  1. 定义

值可变, 本质是内存中一块空间的名字, 是存储数据的基本单元

这块空间是有类型、有名字、有字面值的

(数据类型指导程序在运行阶段该开辟多大的空间)

  1. 格式:

声明:数据类型 变量名; 注意变量名是小驼峰

int a, b, c; ✔️ 声明完成≠开辟了空间

​ 在同一个作用域中, 变量名不可重名; 声明只有 1 次

初始化:变量名 = 字面值 字面值与数据类型一致; 初始化才可用\空间才已被开辟

声明+初始化:数据类型 名字 = 值;

  1. 访问一个变量的2种形式
    • get 读取
    • set 设置/修改
  1. 变量的作用域: 出了{}就不认识了(方法结束后, 变量的内存就释放了)
  1. 变量的类型

    1)局部变量

    ​ 在方法体内的变量

    2)成员变量

    ​ 在方法体外、类体之内声明的变量

```java
public class HelloWorld {
    public static void main(String[] args) {
        int i = 1;
        System.out.println(i);//就近访问1处
    }

    static int i = 2;
    //若main方法体内找不到,会找全局有否static变量可访问

    public static void doSth() {
        int i = 3;
        //不可跨方法体访问(1、2处都找不到也不会找到3处
    }
}
```

四、数据类型

作用:指导JVM在运行程序时需要给该数据分配多大的内存空间

类型-大类: 基本数据类型引用数据类型

基本数据类型——四大类、八小种

(一) 整数型

byte short int long 1 2 4 8

(二) 浮点型

float double 4 8

数字类型-练习

  1. 如何表示一个数字的正负?
  2. byte的最大值是?
  3. 00000000 00000000 00000000 10000000是什么类型?
  4. 00000000 00000000 00000000 10000000 - 1 = ?
  5. 八进制与十六进制的开头?
  6. 整数字面值默认类型为?如何转为其他, 比如long?
  7. 是否有精度比double更高的类型?
  8. 浮点数字面值默认类型为?如何转为其他?�

key

  1. 最高位(最左边) 0正1负

  2. 01111111

  3. int 4个字节

  4. 00000000 00000000 00000000 01111111

  5. 0和0x

  6. int; 后加L

    long y = 1234567899;    //编译报错
    long z = 1234567899L;   //编译通过
    
  7. SUN在基础SE类库内提供了更高精度的类型(引用数据类型而非基本数据类型): java.math.BigDecimal

  8. double; 后加F

(三) 布尔型

bool 2

底层 0假1真

有效值 false和true

(四) 字符型

char 2

‘a' 97 01100001

’A' 65 01000001

‘0’ 48 00110000

(五)类型转换规则

  1. 除bool其他都可相互转换
  1. 自动类型转换: 小容量转为大容量

    • byte不可向char转换;

    • short、char都可向int转换

  1. char可以get更大的数(因为字符无正负
  1. 强制类型转换: 大容量转换为小容量

    格式: int y = (int) x; //long x = 100L;   赋值左右类型要一致
    
    • 结果: 高位(左边)的二进制会被砍掉(精度损失、谨慎使用)
  1. 多种类型混合运算实现:

    • 各自都转换成大容量的, 再做运算

      • int值不超过小弟们的取值范围,也可直接赋给小弟们

五、运算符

(一)加减乘除

(二)关系运算符

= != > >= < <=

结果: 布尔型

(三)赋值运算符

=

+= -= %= *=

(四)逻辑运算符

两边都是布尔, 最后结果也是布尔

符号 说明
& 有false则false
| 有true则true
! 取反
^ 异或, 两边不一样就是true
&& 短路与: 左false则false (不算右可得)
|| 短路或: 左true则true (不算右可得)

根据需求决定要不要用短路逻辑运算符 (第二个算子是否需要执行)

另可划分:布尔运算符与位运算符

类型 符号
布尔运算符 &&,||, &, |
位运算符 &, 按位与; |, 按位或; ^, 按位异或; ~, 按位非; >>, 右移; >>>, 右移,左边空出位以0填充; <<, 左移

Q: 2->8的最快方法?

A: 00000010 将1左移2位

(五)三目运算符/条件运算符

(六)+

  1. 字符+

    ASICII码, char -> int

  2. 字符串+

    拼接: 表达式中只要有一个字符串, 则进行的都是拼接操作

六、输入

三步骤

  1. 导包

    import java.util.Scanner;
    
  1. 创建对象

    Scanner sc = new Scanner(System.in);
    
  1. 接收数据

    Int i = sc.nextInt();
    

七、方法function

(一)格式

[修饰符列表] 返回值类型 方法名(形参列表){  //方法名要有动词属性, 见名知义, 不同功能区别也要大一点
    方法体  //main方法里要短,要学会抽离方法
}

1. 修饰符列表

该项为可选项

Q: 方法有static关键字, 如何调用该方法?

A: 类名.方法名(实参列表);

​ 但有时可省略类名: 该方法在当前类中

2. 返回值

- 非void的方法

1). 返回格式必须为return 值; (值要相对应)
2). 虽然有返回值, 但调用者可选接收否 (使用变量接收)
3). 可直接输出结果, 不用必须变量才可输出

- void方法

​ return;

3.内存分配

JVM虚拟内存模型

1). 方法只定义, 不调用, 是不会执行的; 并且在JVM中也不会给该方法分配“运行所属”的内存空间

2). JVM内存划分
- 方法区内存——存方法代码片段 (.class字节码文件的一部分)
(1) 字节码文件在类加载的时候, 类加载器将其放入方法区中(方法区内存最先有数据)
(2) 方法代码片段可以被重复调用: 每次调用都需要给该方法分配独立的活动场所(栈)
(3) String.class 、System.class ... 也在此 (rt.jar中)
- 堆内存
- 栈内存
(1) 分配方法运行所属的内存空间——压栈(局部变量的内存在这里)
(2) 释放该方法的内存空间——弹栈
(3) 最先调用main方法, 而它最后结束

JavaStudy 入门-基础语法(Day03 - Day05)_第1张图片
image-20200212205633951.png

(二)方法重载/overload

  1. 功能相似时,尽可能让方法名相同 (不同功能名字也要有区别)

  2. 重载情况:在同一个类中, 方法名相同, 但参数列表不同: 参数的数量、顺序、数据类型不同 (方法重载仅和方法名+参数列表有关, 而与返回值类型、修饰符列表无关)

  3. 仅参数名不同不构成重载

public static void m1(int a , int b);
public static void m1(int b , int a);   //方法重复,而非重载

(三)方法的递归调用

  1. 无递归出口: java.lang.StackOverflowError (栈内存溢出错误)

  2. 耗内存,尽量不用 (递归太深也会导致栈溢出错误)

  3. 感觉: “大” -> “小”的套娃, 递归出口时最小情况

  4. 出口:

    if(条件){
        return 值;
    }
    

以上是全部基础语法的内容, 算是开了门, 接下来要迈门槛啦~

你可能感兴趣的:(JavaStudy 入门-基础语法(Day03 - Day05))