Java基础(2)

Java 基础

Java 基础2

标识符

在我阅读的资料里面说java标识符是由字母,数字,下划线( _ ) 和 美元符号($)组成的,但是数字不能开头 , 也不能是Java 关键字 .

但是我实测的时候发现中文以及¥是可行的

public class Test {
    public static void main(String[] args) {
    String 王者¥ = "荣耀";
    System.out.println(王者¥);
	}
}

结果输出
在这里插入图片描述

但是为了规范,建议(可以阅读阿里巴巴Java开发手册)

  • 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
  • 所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

关键字

在这里插入图片描述
稍微介绍一下其中的几个

  • assert 断言 (详情请见文章末尾的资料参考链接)

    • 首先设置开启断言功能 (添加如图红框标记的东西,为什么在这里添加,到后面关于JVM的知识会谈及)
      在这里插入图片描述
    • 程序
    public class Test{
    
    public static void main(String[] args) {
        boolean isSafe = false;
        assert isSafe;
        System.out.println("断言通过");
        } 
    }
    
    • 观察结果,分析异常,说是断言失败,就是你假设的条件不符合,程序不能继续运行
      在这里插入图片描述
  • const : 保留,暂无实际意义

  • goto : 保留, 暂无实际意义

  • transient :序列化使用

public class Test{

    public static void main(String[] args) {

        Person person = new Person("张三", 14);
        try {
            serialize(person);
            deserilize();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void serialize(Person person) throws Exception{
        File file =new File("E:\\test.txt");
        if(!file.exists()) {
            file.createNewFile();
        }

        FileOutputStream fos = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        oos.writeObject(person);
        oos.writeObject("hello,world");


        // 可以只关闭处理流, 不关闭节点流
        if(oos != null) {
            oos.close();
        }


    }

    public static void deserilize() throws Exception {
        File file = new File("E:\\test.txt");
        if(!file.exists()) {
            System.out.println("文件不存在,程序退出");
            System.exit(0);
        }

        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);

        Person person = (Person)ois.readObject();
        System.out.println(person);
        String str = (String)ois.readObject();
        System.out.println(str);

        if(ois != null) {
            ois.close();
        }
    }

}


class Person implements Serializable {
    private String name;
    // 有时候,直接问一个女性的年龄是不礼貌的,所以我们不将这个字段序列化了^。
    // 指定不序列化的字段以初始值显示
    private transient int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
 

结果输出 : age属性没有被序列化
在这里插入图片描述

  • enum 枚举类型 (详情请见文章末尾的参考资料链接)
  • instanceof (详情请见文章末尾的参考资料链接)
    • 语法 obj instance of
    • 要注意的
      • obj 必须是引用类型,不能是基本数据类型 (编译不通过)
      • obj 为 null ,instanceof 任何类 返回false
  • native 用在方法上面,标明这是一个本地方法,会调用底层C代码
  • strictfp 用在方法或者类或者接口上面,保证平台移植过后,浮点数计算结果都是一样的。(详情请见文章末尾的参考资料链接)
  • synchronized 同步 ,通常用于多线程中,充当锁的作用
  • voliatile 同上,但是只有可见性,没有原子性。

数据类型

分为基本数据类型和引用数据类型

  • 基本数据类型有8种。其中的自动类型转换为(低精度转换为高精度,整型转换为浮点型)
byte
short
int
Char类型 2个字节可以放中文
long
float
double
  • 引用数据类型有数组,类,接口

变量

变量遵循“先定义, 后使用”的原则,在使用变量之前必须定义变量。
而且在定义变量后,在使用之前必须为它赋值。成员变量会在对象被创建的时候赋予默认初始值。局部变量,就必须赋值后才能使用。

测试代码

package com.company;

import java.io.*;


public class Test {
    public static void main(String[] args) {
       // 定义了一个局部变量
       int i;
       // 没有赋值就使用了
       System.out.println(i);
    }
}

class Person {
    public int age;
    public String name;
}

运行结果
在这里插入图片描述

变量测试代码2

package com.company;





import java.io.*;


public class Test {

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.age);
        System.out.println(person.name);

    }

}


class Person {
    // 这里为了便于访问,设置成为了public类型,通常时候还是要设置为private
    public int age;
    public String name;

}

结果输出:
在这里插入图片描述

数据类型转换

通常基本数据类型像上面给出的那副图样转换。
也还有会自动类型转换的范例
代码演示

public class Test {

    public static void main(String[] args) {
        // 这里 1 也是int类型的, <= 127 可以照常赋值,> 127 会报错
        byte a = 1, b = 2;
        // 在进行表达式求值时, java会将byte类型, short类型, char类型操作数据提升为int型
        // 会自动进行类型转换  等同于 a = (byte)(a + b) , 但是 a = a + b 不会进行自动类型转换
        a += b;
        System.out.println(a);
    }
}

数据的标准输入、输出

数据的输入

  • 标准输入流 System.in
  • 对于从键盘输入数据,一般使用Scanner类来实现
    • 由于Scanner的缓冲机制和截取字符的特性,在程序中要同时输入String类型和数值类型时,最好定义两个Scanner对象,一个接收String 型数据,一个接收数值型数据。否则得出来的值可能不正确。

数据的输出

  • 标准输出流 System.out

System.out.println() 方法 :System 大写,一个类,out 小写,静态成员变量,是PrintStream类型的,里面有个方法叫做println()

运算符

这里记住优先级就好了。
单目运算符 > 多目运算符
算数运算符( + 、-、 *、 / ) > 关系运算符 (> 、 < 、== ) > 位运算符 ( &、 | 、 ^ 、 << 、 >> ) > 逻辑运算符 (&& 、|| 、!)> 赋值运算符(=) > 逗号

拓展:
& 和 && 的关系

  • & 为 位运算符的时候,为按位与,同为1为1 。
  • 为 关系运算符的时候,与&& 相同。
  • 不过 & 是 非短路逻辑运算符,&& 为 短路逻辑运算符
    • 非短路逻辑运算符 就是 两边的真假性 都会判断
    • 短路逻辑运算符 就是 得出一个为错误的时候,另外一个无需判断正确性了(因为 任何值 && 一个 错误的条件 为 false),当然得到为true的条件还要判断另外一个条件的真值,因为还得不出整个条件表达式的真值性。
    • 比如说(3 > 4 && 2 != 0) 这个条件
      • 首先 3 > 4 这个条件是错误,与上任何值这个表达式都是错误的
      • 短路逻辑运算符 就不会判断 2 != 0 这个条件了,因为是为错误的
      • 非短路逻辑运算符 会判断 2 != 0 这个条件。

代码忘添注释了,多多海涵!

资料参考 :
assert 断言
enum 枚举
enum_枚举2
instanceof
strictfp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值