数据类型 2020/12/8

强类型语言

所有变量需要先定义才能使用

Java的数据类型分为2大类

  • 基本类型
  • 引用类型

在这里插入图片描述

整数拓展

二进制是0b开头 八进制是0 十六进制是0x

int i = 10;
int i2 = 010;  //八进制0
int i3 = 0x10; //十六进制0x   0-9 A-F F就是等于16

system.out.printIn(i);
system.out.printIn(i2);
system.out.printIn(i3);

浮点数拓展

float f = 0.1f;
double d = 1.0/10;
system.out.printIn(f==d); //false
//-----------------------------------------------------------------
float f = 22222222222222222333333333332f;
float f2 = f + 1;
System.out.println(f == f2); //true
//这里相等的原因是因为float是有限的 离散的 有舍入误差,大约  接近但不等于
//最好完全避免使用浮点数进行比较,银行业务,金额相关用BigDecimal,因为浮点数会精度丢失

字符拓展

 		char c = 'a';
        char c1 = '中';
        System.out.println(c1);//中
        System.out.println(c);//a
        System.out.println((int)c);//强制转换 97
        System.out.println((int)c1);//强制转换 20013

所有的字符本质就是数字
编码 Unicode 2字节 65536

char c3 = '\u0061'; //a
//  \u是指unicode编码的0061,对应的就是字母a

//转义字符
// \t 制表符
// \n 换行

		String s1 = new String("Hello World");
        String s2 = new String("Hello World");
        String d1 = "Hello World";
        String d2 = "Hello World";
        System.out.println(s1==s2);//false
        System.out.println(d1==d2);//true
        因为s1,s2是创建不同的对象,比较的是2个对象的内存地址值
        而d1,d2都是用的常量池里的一个叫“Hello World”的字符串他们地址都是相同的,相当于d1,d2都指向了同一个地址
        

类型转换

  • 由于java是强类型语言,所以进行某些运算时,需要用到类型转换

低 --------------------------------------------------高
byte,short,char > int > long > float > double
注意:小数优先级大于整数

  • 运算中,不同类型的数据先转换为同一类型,再进行运算

  • 强制类型转换发生在高转低,例如下图 由于是高转低所以要在i前加(byte)

int i = 128;
byte b = (byte)i;
如上述代码运算结果是 i = 128, b = -128,因为byte最大是127,所以内存溢出了,可以查看Byte的源码

强制转换 (类型)变量名 高-低
自动转换 低-高

  • 自动类型转换是从低到高自动转换

注意点

  • 不能转换布尔值
  • 不能转换不相关的类型
  • 把高容量转低容量需要强制转换
  • 转换的时候可能存在内存溢出,精度问题
  • 操作比较大的数值要小心内存溢出

jdk7新特性 数字之间可以用下划线分割,如

int i = 10000000000;
int i = 1000_0000_000;
//这样是一样的;

		int money = 1000000000;
        int years = 20;
        int total = money*years;//-1474836480
        long total2 = money*years;//-1474836480 默认是int,转换之前已经存在问题了,因为他是先运算再转换,所以运算就溢出了,需要改为先转换再运算
        long total3 = money*((long)years);//200000000

变量

  • 变量就是可以变化的量
  • Java是一种强类型语言,每个变量都必须声明其类型。
  • Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

作用域分为类变量,实例变量,局部变量
public class Variable{
static int all = 0; //类变量 需要加static
String str = “Hello World”; //实例变量 没有static
public void method(){
int i = 0; //局部变量 在方法里的变量

type varName = Value

注意:

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型
  • 变量名必须是合法的标识符
  • 变量声明是一条完整的语句,因此每个声明都必须以分号结束

实例变量:从属于对象:如果不自行初始化,这个类型的默认值 整数是0 浮点数是0.0
布尔值默认是false,除了基本类型,其余的默认值都是null

常量

  • 常量(Constant):初始化(initialize)后不能再改变值
  • 所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
final 常量名 = 值;
final double PI = 3.14;
常量名一般使用大写字符。

//修饰符,不存在先后顺序 如:

static final double PI = 3.14;
final static double PI = 3.14;

变量的命名规范

  • 所有变量,方法,类名:见名知意
  • 类成员变量:首字母小写和驼峰原则:monthSalary
  • 局部变量:首字母小写和驼峰原则
  • 常量:大写字母和下划线:MAX_VALUE
  • 类名:首字母大写和驼峰原则:Man,GoodMan
  • 方法名:首字母小写和驼峰原则: run(), runRun()

运算符

  • Java支持如下运算符:
    • 算术运算符:+,-,*,/,%,++,–
    • 赋值运算符 =
    • 关系运算符:>,<,<=,>=,==,!=
    • 逻辑运算符:&&,||,!
    • 位运算符:&,|,^,~,>>,<<,>>>
    • 条件运算符 ? :
    • 扩展赋值运算符 +=, -=,/=,*=

自增自减运算

int a = 3;
int b = a++;  //执行这行代码后,先把A的值给B,然后再自增
sout(b);//3
int c = ++a;//执行这行代码后,先自增,再把值给C

位运算

A = 0011 1100
B = 0000 1101
A&B = 0000 1100   //00为0 11为1 01为0
A|B = 0011 1101    //00为0 ,有1为1
A^B = 0011 0001  //两个数相同为0,否则为1
~B = 1111 0010  //取反

2*8怎么运算最快  2*8可以拆分为 2*2*2*2    就是2<<3 这是效率最高的
<< 相当于*2   那么>>相当于/2
二进制
0000 0000 0
0000 0001 1
0000 0010 2   //把这里的1往左移动3次就等于16
0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16

a+=b //等于a=a+b
a-=b //等于a=a-b
a/=b //等于a=a/b
a*=b //等于a=a*b

//字符串连接符

int a = 10;
int b = 20;
system.out.printIn(a+b); //30
system.out.printIn(""+a+b);//1020
system.out.printIn(a+b+"");//30
注意空字符串在前会进行拼接所以得出1020,空字符串在后会先进行运算所以是30+"",也就是30

三元运算符

? :
x ? y : z
如果x==true 结果为y否则为z

包机制

  • 为了更好的组织类,,Java提供了包机制,用于区别类名的命名空间
  • 包的语法格式为 package pkg1.pkg2
  • 一般利用公司域名倒置作为包名
  • 为了能够使用某一个包的成员,我们需要在Java程序中明确导入该包,使用import语句
    import pkg1.pkg2
    import pkg1.* //*是通配符,代表导入这个包下所有的类

JavaDoc

  • javadoc命令是用来生成自己API文档的

  • 参数信息

    • @author 作者
    • @version 版本
    • @since 最早使用的jdk版本
    • @param 参数名
    • @return 返回值情况
    • @throws 异常抛出情况

Scanner

  • Scanner类用来获取用户的输入
  • 基本语法:
Scanner = new Scanner(System.in);
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们需要使用hasNext()与hasNextLine()判断是否还有输入的数据
  • next():
    • 一定要读取到有效字符后才可以结束输入
    • 对输入有效字符之前遇到的空白,next会自动将其过滤
    • 只有输入有效字符后才将后面输入的空白作为分隔符或者结束符
    • 不能得到带有空格的字符串
  • nextLine():
    • 以Enter为结束符,也就是返回输入回车前的所有字符包括空白
    • 可以获得空白
 //创建扫描器对象,用来接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方法接受:");
        //判断用户是否有输入
        if (scanner.hasNext()){
            //接受用户的输入
            String str = scanner.next();
            System.out.println("用户的输入为:"+str);
        }
        //凡是输入io流的类如果不关闭会占用一定资源,所以用完要关闭
        scanner.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值