Java初认识–基本数据类型(int 和byte之间赋值)默认值 类型强转

  • Post author:
  • Post category:java



Java简单介绍

Java面向对象:一个面向对象的木匠关心的制作的椅子;这个木匠干了什么事情

非面向对象的木匠关心的是所使用的工具。

狗吃粮 面向对象

吃狗粮 非面向对象


Java与c++区别:


1.简单性:没有指针,头文件,结构,联合、操作符重载(operator) 虚基类等。

2.面向对象:都是面向对象,但是java没有多继承,但是接口可以实现多继承,Java提供了运行时自省功能。(什么是与运行时自省功能)

3.健壮性:

4.安全性:防范常见的各种攻击

5.可移植性:基本数据类型的大小以及有关运算都做了明确说明。Java中int永远是4字节(32)位,而在C++中int 可能是2字节或4字节,也可能是编译器指定商指定的其他大小,在Java中,数据类型具有固定的大小,消除了代码移植时存在的问题。

6.多线程

7.动态性:与c++相比功能具有动态性,它能够不断适应发展的环境,库中可以不断添加新方法和实例变量,而对客户端没有影响。

发展史:Java语言起源于1991年Sun公司的Oak项目,1995年正式命名为java

1996年1月 Java1.0发布,提供了可解释执行的Java虚拟机。

1997年2月Java1.1发布,反射,接口,类的关系

1998年12月 Java1.2 使用Just in time编译技术,语言的可迁移性好执行效率最优,Collections集合类设计优良

2006年Java 6 ,Java开源

2009年Oracle收购Sun公司

2014年,Java8 Lambda表达式。函数式编程能力。

J

ava是一门半编译,半解释型语言。先通过javac编译程序吧源文件进行编译,编译后生成的.class文件是由字节码组成的平台无关,面向JVM的文件,最后启动Java虚拟机来运行.class文件,此时JVM会将字节码转换成平台能够理解的形式来运行。


主类和主方法


Test.java–是源文件,源文件必须与主类名(public class )保持一致,一个源文件只能有一个主类 ,主方法存在与主类中。

Test.java 源文件

主类:public class Test

主方法 : public static void main(String[] args)


Java程序编译–执行流程


编译:javac Test.java —>Test.class(二进制文件)(若程序中出现中文,可以加上 -encoding UTF-8)

解释:java Test(主类名称)

命令行向主方法传参 java 主类名称 参数1 参数2 (参数1是args[0],参数2是args[1])


JDK JRE


JDK:java开发工具包,包含JRE,多了编译器javac 以及调试工具 JConsole、jstack,针对java程序员;

JRE: java运行时环境,包含JVM以及Java核心类库,是运行Java程序的环境,针对使用Java程序的客户;

JVM: java虚拟机,(Java移植性的关键)

标识符:数字,字母,_、$,不能以数字开头,不能是关键字。


数据类型


在这里插入图片描述


int


在java中,任何一个整型常量都是int类型。

整型溢出:

public class Int
{
    public  static void main(String[] args)
    {
        //int 的包装类是Integer
        int maxValue=Integer.MAX_VALUE+1;//整型最大值+1,会溢出
        int minValue=Integer.MIN_VALUE-1; //整型最小值-1,会溢出
        System.out.println(maxValue);
        System.out.println(minValue);
    }
}

在这里插入图片描述

到达整型最大值或最小值后,需要转换数据类型:

  int maxValue=Integer.MAX_VALUE;
  int minValue=Integer.MIN_VALUE; 
  long max=maxValue+1;
  long min=minValue-1;
  System.out.println(max);
  System.out.println(min);

在这里插入图片描述

结果依然是溢出,是因为执行顺序是从右向左,右边是int类型相加,这时已经溢出,那么max里存的就是溢出值。

解决方法如下:

long maxValue=Integer.MAX_VALUE+1L;  //int 和long相加,int会自动提升成long
long minValue=(long)(Integer.MIN_VALUE-1);  //强转为long

在这里插入图片描述


Java中小的数据与大的数据做数值运算,小的数据类型会自动提升为大的数据类型

,当把I(int)声明为long(在数字后加L或l,但推荐使用L,如num=11+1l=12,而不是22,推荐写成11+1L,不容易造成混淆)。


在java中,大的数据转换为小的数据,必须强转,但会造成数据丢失。


long num = 2147483648L;

int result = (int) num; //需要强转


int 和byte

       //整型常量在byte范围内
        byte a=120;  //byte取值范围是 -128-127
        System.out.println(a);  //120

        //整型常量不在byte范围内--》需要强转
        //byte b=130;// 错误(从int转换到byte可能会有损失)
        byte  b=(byte)130;  //强转为byte
        System.out.println(b); //-126 
        byte  c=(byte)300;
        System.out.println(c); // 44  取的是300的低吧8位即44

        //整型变量--》需要强转
        int num=12;
        //byte d=num;  //错误(从int转换到byte可能会有损失)
        byte d=(byte)num;
        System.out.println(d); //12


整型常量若在byte类型的保存范围内,可以直接赋给byte变量,不用强转;

整型常量若不在byte类型的保存范围内,必须强转;

整型变量无论值是否在byte范围内,都需要强转;


上述只限于int 和byte。

对于int 和byte取值范围可参考这篇博客:

https://blog.csdn.net/sophia__yu/article/details/81143145



默认值


在最上面一张图,有各个类型变量的默认值,但是默认值需要结合类来观察,主方法中变量必须先赋值再使用,在主方法中不存在默认值否则会报错;

public class Int
{
    public  static void main(String[] args)
    {
       int value; //错误
       System.out.println(value);
    }
}

在这里插入图片描述

解决办法如下:

public class Int
{
    int value;
    public  static void main(String[] args)
    {
        Int i1=new Int();  //需要结合类来看
        System.out.println(i1.value);  //0 
    }
}



版权声明:本文为sophia__yu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。