【Java】从头开始的Java复建day1

发布时间 2023-08-06 23:09:11作者: ryukirin

用的书:《Java从入门到精通》

前两章跳过了

第三章 Java语言基础

3.1 Java主类结构

  • 包声明
  • 导入api类库 eg. import xxx;
  • 声明类
  • 声明成员变量和局部变量
  • 编写主方法
// 包声明
// 必须在Number包中才能写一这行
package Number;

// 必须要和.class文件名一致,不如说这里就是要写文件名的地方
public class Java3_1 {
    // 全局变量(成员变量) 关键字static
    // 全局变量声明在类体中
    static String s1 = "你好";
    // 主方法
    // 共有 静态 返回值为空 main函数(字符串类型数组 参数)
    public static void main(String[] args) {
        // 局部变量 声明在方法体中
        String s2 = "Java";
        System.out.println(s1);
        System.out.println(s2);
    }
}

3.2 基本数据类型

  • 数值型
    • 整数类型(byte short int long)
    • 浮点类型(float double)
  • 字符型
  • 布尔型

整数类型

十进制 八进制 十六进制

注意:

  • 除了0,其他十进制数字不能以0为开头
  • 八进制必须以0开头
  • 十六进制必须以0X或者0x开头
数据类型 内存空间(8位为1字节) 取值范围
byte 8位 -128~127
short 16位 -32768~32767
int 32位 -2147483648~2147483647
long 64位 -9223372036854775808~19223372036854775807

浮点类型

  • 单精度浮点类型(float)
  • 双精度浮点类型(double)

注意:

  • 默认情况下位double 若要使用float需要在后边加F或f
数据类型 内存空间(8位为1字节) 取值范围
float 32位 1.4E-45~3.4028235E38
double 64位 4.9E-324~1.7976931348623157E308

字符类型

  • char型
    • 仅存储单个字符
    • 占用16位内存空间
    • 定义时要以''表示
  • 转义字符:”\“开头
转义字符 含义 转义字符 含义
\ddd 1~3位八进制 \ uxxxx 4位十六进制
' 单引号 \ 反斜杠
\t 制表符 \r 回车
\n 换行 \b 退格
\f 换页

布尔类型(逻辑类型)

只有true和false两个值

public class Java3_2 {
    public static void main(String[] args){
        System.out.println("----------------1.整数类型----------------");
        // 整数类型
        // 定义int型变量x
        int x1;
        // 定义int型变量x,y
        int x2, y1;
        // 定义int型变量x,y并赋初值
        int x3 = 450, y2 = -462;
        int test = 2147483647;
        // int test1 =  2147483648;
        // bug text: java: 整数太大

        /*
        对于long型,若其取值大于int最大值或小于int最小值
        * 即取到了long的取值范围中不属于int的那部分
        需要将数字后加L或l,来表示是长整数
        */
        long testlong = 2147483648L;
        // 会有提示将l换为L更好
        long testlong1 = 2147483648l;
        // long testlong2 = 2147483648;
        // bug text: java: 整数太大

        // 例子
        // 相加的时候需要将结果存为取值范围最大的数据类型中
        byte mybyte = 124;
        short myshort = 32564;
        int myint = 45784612;
        long mylong = 46789451;
        long result = mybyte + myshort + myint + mylong;
        System.out.println("结果为:" + result);

        System.out.println("----------------2.浮点类型----------------");
        // float f = 13.23;
        // bug text: java: 不兼容的类型: 从double转换到float可能会有损失
        float f1 = 13.23f;
        double d = 638.678;
        double d1 = 638.678d;
        System.out.println("单精度浮点类型:" + f1);
        System.out.println("双精度浮点类型:" + d1);

        System.out.println("----------------3.字符类型----------------");
        // char c = "a";
        // bug text: java: 不兼容的类型: java.lang.String无法转换为char
        char c1 = 'a';
        //另一种表达方式可以使用字符在Unicode表中的排序编号来打印字符
        char c2 = 97;
        System.out.println("直接使用字符定义:"+ c1);
        System.out.println("使用字符在Unicode表中的排序编号来打印字符;" + c2);
        System.out.println("例子:");
        char word = 'd', word2 = '@';
        int p = 23045, p2 = 45213;
        System.out.println("d在Unicode表中的顺序位置是:" + (int)word);
        System.out.println("d在Unicode表中的顺序位置是:" + (int)word2);
        System.out.println("Unicode表中的第23045位是:" + (char)p);
        System.out.println("Unicode表中的第45213位是:" + (char)p2);
        System.out.println("转义字符");
        char c3 = '\\';
        char c4 = '\u2605';
        char c5 = '\123';
        String str = "says \'OH, I see, thx.\'";
        String str1 = "table name1\ttable name2\t\ntable value1\ttable value2\t";
        char c6 = 'a';
        char c7 = '\b';
        char c8 = 'c';
        char c9 = '\f';
        System.out.println("反斜杠" + c3 + "星星" + c4);
        // 单引号
        System.out.println(str);
        // 制表符和换行
        System.out.println(str1);
        /*
        关于退格的说明
        这里首先定义了char c6 = 'a'; char c7 = '\b'; char c8 = 'c';
        当运行了c6的时候,光标是在a后边的
        之后运行了c7,光标变成了a前
        此时运行c8的话所输出的字符将会覆盖c6
         */
        System.out.print(c6);
        System.out.print(c7);
        System.out.println(c8);
        System.out.println(c9);
    }
}

3.3 常量与变量

  • 标识符
    • 由任意顺序的字母 下划线 美元符号和数字组成 严格区分大小写
    • 第一个字符不能是数字
    • 不能是保留关键字(int之类的)
  • 关键字
    int public this finally boolean abstract
    continue float long short throw throws
    return break for static new interface
    if goto default byte do case
    strictfp package super void try switch
    else catch implements private final class
    extends volatile while synchronized instanceof char
    protected import transient double

变量的声明

变量的定义就是要告诉编译器compiler这个变量的类型进而分配内存空间

这个内存空间内的值是变化的 那么这个内存空间就称为变量 变量名就是这个内存空间的名字

变量声明的时候可以赋值可以不赋值但一定要声明变量类型

常量的声明

常量(constant)通常也被称为final变量

在整个程序中只能被赋值一次 并且需要final关键字

通常常量名使用全大写字母

当声明了变量会发生什么

内存

  • 系统(OS)区
  • 程序(Program)区
  • 数据(Data)区

当程序执行时

1.程序代码加载到程序区
2.在数据区配置空间给出这两个变量

变量的有效范围

  • 成员变量:在类体中定义
    • 静态变量:可以跨类 在其他类中可以用"类名.静态变量名"使用
    • 实例变量
  • 局部变量
    • 在类的方法体中定义 只在当前代码块中有效
    • 生命周期取决于方法
      • 当该方法被调用 Java虚拟机会为方法中的局部变量分配内存空间
      • 当该方法调用结束后 会释放方法中的局部变量占用的内存空间 局部变量也会被销毁
    • 当局部变量和成员变量名字相同 成员变量将暂时在此方法中失效
public class Java3_3 {
    // 当常量为成员变量的时候必须声明的时候赋值
    static final double PI = 3.14;
    // 这个可以不在声明时赋值
    static int age = 18;
    // 实例变量
    int x = 45;
    // 静态变量
    static int y = 90;
    static int times = 3;
    public static void main(String[] args){
        final int number;
        // number = 1235;
        // bug text: java: 可能已分配变量number
        // number是常量 只能够赋值一次
        age = 22;
        number = 1236;
        System.out.println("常量PI的值为:"+PI);
        System.out.println("赋值后number的值为:"+number);
        System.out.println("int型变量age的值为:"+age);

        // 当重名时 优先使用该方法中定义的变量 近水楼台先得月
        int times = 4;
        System.out.println("times的值为:" + times);
    }
}