JavaSE-java基础(三)

一、数据类型:
数据类型:
java是一种强类型的语言,针对每一种数据都定义了明确的数据类型。
1.分类:
A:基本数据类型
B:引用数据类型
2.基本数据类型:4类8种
A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
3.注意:
整数默认是int类型;
浮点数默认是double类型;
长整形后缀用L或l表示;
单精度浮点数用F或者f标记,建议使用F。
4.使用变量的时候需要注意的问题:
A:作用域
变量定义在那个大括号内,它就在这个大括号内有效。
并且,在同一个大括号内不能同时定义同名的变量。
B:初始化值
没有初始化值的变量不能直接使用。
你只要在使用前给值就行,不一定非要在定义的时候立即给值。
推荐在定义的时候给值。

        定义变量的格式:
            a:数据类型  变量名 = 初始化值;
            b:数据类型  变量名;
                变量名 = 初始化值;
    C:在一行上建议只定义一个变量
       可以定义多个,但是不建议。

5.数据类型转换之默认转换
一般来说,我们在运算的时候,要求参与运算的数据类型必须一致。

注意:
boolean类型不能转换为其他的数据类型。
默认转换:
A:byte,short,char->int->float->double
B:byte,short,char相互之间不转换,他们参与运算首先转换成int类型。

6.数据类型转换之强制转换
从大的到小的数据类型。
格式:
    目标数据类型 变量 = (目标数据类型)(被转换的数据);
注意:不要随意的去使用强制转换,因为它隐含了精度损失问题。
思考题1:请问下面这个有没有问题
    double d = 12.345;
    float f = d;
        有问题,可能损失精度
思考题2:看看下面两个定义有没有区别呢?
    float f1 = (float)12.345
    float f2 = 12.345f;

f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。

7.几个小问题
(1)在定义long或者float类型变量的时候,要加L或者F;
整数默认是int类型,浮点数默认是double

byte:short在定义的时候,他们接受的其实是一个int类型的值。
这个是自己做了一个数据监测的,如果不在他们的范围内,就报错。

(2).byte值的问题
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b2 = (byte)129; //-127
byte b2 = (byte)130; //-126

128:10000000
-128:10000000(这里的1即是符号位,也是数值位)

(3).数据类型转换之默认转换
byte,short,char — int — long — float — double
long:8个字节
float:4个字节
原因:A:他们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.4+10^38>2*10^38>2*8^38=2*2^114
(4).面试题:java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以,因为java语言中的字符占用两个字节。
java语言采用的是Unicode编码。

二、变量
1.变量概述
就是在程序的执行过程中,其值是可以在一定范围内发生改变的量。

1.组成规则:
    A:必须对其进行限定。
        如何限定?数据类型
    B:我们在运算的时候,不可能是拿着空间去运算,我们真正运算
        时使用的是该空间中的值,我们就给该空间起了一个名字。
    C:即使你有数据类型了,有变量名了,但是如果没有值,这个空间
        是一个垃圾空间,没有任何意义。
2.定义变量的格式是:
    数据类型    变量名 = 初始化值;

2.面试题
byte b1 =3,b2 = 4,b;
b = b1 + b2; //这个是类型提升,所以有问题
b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错
那句是编译失败的呢?为什么呢?
b = b1 + b2;是有问题的。因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。

byte b = 130;有没有问题,如果我想让赋值正确,
可以怎样做?结果是什么呢?
    可能会损失精度,因为byte的范围是-128到127,而130不再此范围内,所以报错。
    byte b = (byte)130;

    分析过程:
        A:获取130的二进制:
            00000000  00000000  00000000  10000010
            这是130的原码,也是反码,还是补码
        B:做截取操作,截成byte类型的了
            10000010
            这个结果是补码
        C:已知补码求原码

                    符号位          数值位
            补码      1               0000010
            反码      1               0000001
            原码      1               1111110

        结果是:-126
练习;byte b = 300;

三、位运算符
1.基本用法
&,|,^,~,<<(左移),>>(右移),>>>(无符号右移)
注意:1.要做位运算,首先要把数据转换成二进制(补码)
2.当两边是逻辑表达式时,做的是逻辑运算,
当两边是数据时,做的是位运算符。
3.^的特点:
一个数据对另一个数据位异或两次,该数本身不变。

class OperatorDemo{
public static void main(String[] args){

    //&,|,^,~
    int a = 3;
    int b = 4;

    System.out.println(3 & 4);
    System.out.println(3 | 4);
    System.out.println(3 ^ 4);
    System.out.println(~3);
}

}

/*
分析:因为是位运算,所以我们必须先把数据换算成二进制。

3的二进制:11
    00000000 00000000 00000000 00000011
4的二进制:100
    00000000 00000000 00000000 00000100

&位与运算:有0则0.
    结果:00000000 00000000 00000000 00000000
    结果:0

|位或运算:有1则1
    结果:00000000 00000000 00000000 00000111
    结果:7

^位异或运算:相同则0,不同则1
    结果:00000000 00000000 00000000 00000111
    结果:7

~按位取反运算符:0变1,1变0
    结果:(补码)11111111 111111111 11111111 11111100,求原码
            11111111 111111111 11111111 11111011    
            10000000 00000000 00000000 00000100
    结果:-4

2.位异或运算符的特点
^的特点:
一个数据对另一个数据位异或两次,该数本身不变。

class OpratorDemo2{
    public static void main(String[] args){
        int a = 10;
        int b = 20;

        System.out.println(a^b^b);//10
        System.out.println(a^b^a);//20
    }
}

3.面试题
请自己实现连个整数变量的交换。

class OperatorDemo{
    public static void main(String[] args){
        int a = 10;
        int b = 20;

        //方式1:使用第三方变量(开发中用)
        int c = a;
            a = b;
            b = c;
        //方式2:用位异或实现(面试用)
        //结论:
        //左边:a b a
        //右边:a ^ b
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

        //方式3a = a + b;
            b = a - b;
            a = a - b;

        //方式4:一句话搞定
        b = (a+b) - (a=b);
    }
}

四、生成API文档
1.jdk中主要的包:
java.lang
包含一些java语言的核心类,如String,Math,Integer
,System和Thread,提供常用功能。
java.awt
包含构成抽象窗口工具集的多个类,
这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.net
包含执行与网络相关的操作的类
java.io
包含能提供多种输入/输出功能的类
java.util
包含一些实用工具类,如定义系统特性,
实用与日期日历相关的函数。
实用与日期日历相关的函数。
2.生成自己项目的API文档
需要特殊的注释:
/*/
使用JAVADOC生成API文档
-解决问题:代码和文档的分离
常见的java注释标签:
@Author作者
@version版本
@param参数
@return返回值含义
@throws抛出异常描述
@deprecated废弃。建议用户不使用该方法。

    如何生成API文档:
        单击项目右键--->Export--->java--->javadoc
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值