Java基础知识(二)

因为本人已经有C、C++、python的基础,所以不会那么事无巨细,只会着重强调一些java与上述语言的不同点。(即第一篇当中所说的按照本人的逻辑来记笔记



标识符

  • 由字母、下划线、美元符号和数字组成,长度不受限制(可以是汉字、假名等字符);
  • 第一个字符不能是数字;
  • 不能是关键字、true、false、null。
  • 注:关键字肯定都是小写的。

数据类型

八种基本数据类型

  • 逻辑类型:boolean
  • 整数类型:intbyteshortlong
  • 字符类型:char
  • 浮点类型:floatdouble

整数类型

int类型byte类型short类型long类型
大小4字节,32位1字节,8位2字节,16位8字节,64位
范围-2^31 ~ 2^31-1-2^7 ~ 2^7-1-2^15 ~ 2^15-1-2^63 ~ 2^63-1
备注用后缀L表示

备注:

  • int型常量可以用十进制、八进制、十六进制来表示;
  • 八进制数字以0开头,十六进制以0x开头;
  • 字节为byte,位为bit1 byte = 8 bit

字符类型

  • 常量 / 变量
  • Unicode标准字符集(也是为什么占两个字节的原因)
  • 内存分配2个字节(byte),占16位(bit)
  • 转义字符与c++相同

浮点类型

float型double型
格式须带后缀f或F可带后缀d或D,也可省略
大小4个字节,32位8个字节,64位
精度保留8位有效数字保留16位有效数字

备注:

  • 小数表示法 / 指数表示法(1e-12F表示1乘10的-12次方);
  • 带有小数部分的数据默认是double,若必须要求是float,则必须附带后缀。
  • 可以用1.表示1.0,也可以用.1表示0.1。

类型转换

  • 数据类型按照精度由“低”到“高”排列为:
    byteshortcharintlongfloatdouble

  • 将级别 的变量赋给级别 的变量时,系统自动完成数据类型的转换;
  • 把级别 的变量赋给级别 的变量时,必须使用类型转换运算,即在数字前面加括号,备注需要转换成的类型名,否则会报错。
  • 例如:
    • byte b = 128; (error)
    • byte b = (byte)128; (ok)
    • 原因:byte表示的范围是-128~127,强制类型转换相当于截断。

示例1:

public class main {
    public static void main (String args[]) {
        byte a = 127;
        byte b = (byte)128;
        byte c = (byte)129;
        System.out.println(a+"\n"+b+"\n"+c);
    }
}

运行效果如下:

在这里插入图片描述
(用刚学的计原知识)分析:

  • +128的原码、反码和补码均为010000000,当赋值给一个字节的byte类型时,自动被切成了10000000,也就是补码形式的-128。
  • 同理,+129的原码、反码和补码均为010000001,自动被切成了10000001,是补码形式的-127。
  • 负数补码转换为原码的方法:数值位按位取反再加一,再加上负号。

示例2:

public class main {
    public static void main (String args[]) {
        byte b = 22;
        int  n = 129;
        float f =123456.6789f ;
        double d=123456789.123456789;
        System.out.println("b="+b);
        System.out.println("n="+n);
        System.out.println("f="+f);
        System.out.println("d="+d);
        
        b=(byte)n;    //导致精度的损失.
        f=(float)d;   //导致精度的损失
        System.out.println("\n转换后的b="+b);
        System.out.println("转换后的f="+f);
    }
}

运行效果如下:

运行效果1

输入输出

输入

  • 需要先用Scanner类创建一个对象;
  • Scanner的对象调用以下函数,从键盘读入数据:nextBoolean()nextByte()nextShort()nextInt()nextLong()nextFloat()nextDouble()

示例1:

import java.util.Scanner;  // 这行很重要!

public class main {
    public static void main (String args[]) {
        Scanner s = new Scanner(System.in);
        byte b = s.nextByte();
        int c = s.nextInt();
        System.out.println(b+"\n"+c);
    }
}

运行效果如图:

在这里插入图片描述

示例2:

import java.util.Scanner;  // 这行很重要!

public class main {
    public static void main (String args[]) {
        Scanner scan = new Scanner(System.in);
        // 从键盘接收数据

        // next方式接收字符串
        System.out.println("next方式接收:");
        // 判断是否还有输入
        if (scan.hasNext()) {
            String str1 = scan.next();
            System.out.println("输入的数据为:" + str1);
        }
        scan.close();
    }
}

运行结果如下:

在这里插入图片描述


输出

常规输出

  • System.out.println()输出后换行,System.out.print()输出后不换行。
  • 可以用+号把不同类型的数据连接,一起输出。
public class main {
    public static void main (String args[]) {
        Student stu = new Student("每天都很困");
        System.out.print(stu+"!!!");
    }
}

class Student{
    String name = "";
    public Student(String name){
        this.name = name;
    }
    public String toString(){
        return "This student's name is " + this.name;
    }
}

运行结果如下:

在这里插入图片描述

格式化输出

  • 类似于C中printf的写法,有:System.out.printf(“格式控制部分”,表达式1,表达式2,…表达式n)
  • 例如:System.out.printf("%d,%f",12, 23.78);

数组

基础知识

import java.util.Scanner;  // 这行很重要!

public class main {
    public static void main (String args[]) {
        //声明数组
        int [] ar;
        
        Scanner s = new Scanner(System.in);
        
        //为数组分配空间
        ar = new int[4]; 
        
        for(int i=0;i<4;i++){
            System.out.print(ar[i]+" ");
        }
        for(int i=0;i<4;i++){
            ar[i] = s.nextInt();
        }
        for(int i=0;i<4;i++){
            System.out.print(ar[i]+" ");
        }
    }
}

运行结果如下:

在这里插入图片描述

  • 声明一维/二维数组数组的方式,均是两种都可:
    • int a[];
    • int []a;
    • int [][]a;
    • int a[][];
  • 由示例可知,数组在声明之后,需要为其分配空间;
  • 声明与分配空间可以在一个语句中完成,示例中的两行等效于:int []a = new int[4];
  • 数组中元素若不特别说明,默认赋为0。
  • 声明数组的同时也可以给数组元素初始值,需要用大括号括起

说明:数组属于引用型变量,数组变量中存放着数组的首元素的地址,通过数组变量的名字加索引使用数组的元素。

关于length

  • 对于一维数组,“数组名.length”的值就是数组中元素的个数;
  • 对于二维数组,“数组名.length”的值是它含有的一维数组的个数。
  • 对于a[3][8]而言,a.length的值为3,而a[0].length、a[1].length、a[2].length的值均为8。

示例1

import java.util.Scanner;  // 这行很重要!

public class main {
    public static void main (String args[]) {
        int []a = {1,2};
        
        // 试试直接打印数组名会出现什么
        System.out.println(a);
        
        // 试试声明时就对数组元素赋值的话,数组的长度如何
        System.out.println(a.length);
		
		// for循环的另外一种表达形式
        for(int i : a){
            System.out.println(i);
        }
    }
}

运行结果如下:

在这里插入图片描述

  • 由此可见,在数组声明时就指定元素值,会自动给数组分配长度。
  • 直接打印数组名会打印出一串地址。

示例2

import java.util.Scanner;  // 这行很重要!

public class main {
    public static void main (String args[]) {
        int []a = {1,2};
        int []b = a;
        for (int i : a) System.out.print(i+" ");
        System.out.print('\n');
        for (int i : b) System.out.print(i+" ");
        System.out.print('\n');

		// 创建新的Scanner对象用于输入
        Scanner sca = new Scanner(System.in);

        a[0] = sca.nextInt();
        a[1] = sca.nextInt();
        
        // 查看b是否会跟着a一起改变
        for (int i : a) System.out.print(i+" ");
        System.out.print('\n');
        for (int i : b) System.out.print(i+" ");
        System.out.print('\n');
        
        // 查看a与b的地址是否相同
        System.out.println(a);
        System.out.println(b);
        
        // 查看b数组的长度
        System.out.println(b.length);
    }
}

运行结果如下:

在这里插入图片描述

  • 由此可见,数组属于引用型变量,两个相同类型的数组如果具有相同的引用,它们就有完全相同的元素。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林西河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值