从零开始的JAVA生活(1)JAVA关键字与类型转化

同C++有所不同的是JAVA并不支持隐式向下转型,因为这会使得精确度降低,而JAVA中不同数据类型精度由小到大排列如下:char-->byte --> short --> int --> long --> float --> double。 但如果我们偏要向下转型会发生什么事呢

java 复制代码
  byte a=100;  
  byte c=400;//Incompatible types. Found: 'int', required: 'byte'
  a+=c;    
  c=50;
  byte d=a+c;//Incompatible types. Found: 'int', required: 'byte'

我们可以发现:当a的值在-128-127之间的时候,并不会报错,而到了400时则会。但这里d没有超过啊为了避免出现二义性,该程序不予以计算,就出现了上述结果啦~。 而在这里有些不同的是a+=c,程序并不会报错,这是因为+=隐式的将加操作的结果类型强制转换为持有结果的类型。如果两个整型相加,如 byte、short 或者 int,首先会将它们提升到 int 类型,然后在执行加法操作。

对float也是如此 必须要在小数后加个f。如果我们要将较高的int强制转化为byte时,高位的字节会丢失。如果数值过大超出int型怎么办?答案就是在整数常量后面+ l 或者L将其转换为 long常量,那么对于超级大的数字比如:1234456749143769471835, 超过long的取值范围了怎么办?答案就是调用 BigInteger BigDecimal 两个函数去解决。

而对于字符来说则有些特殊将一个字符常量赋给字符变量时,那么无论如何赋值,一旦打印结果一定是字符,字符变量在参与运算时,是以编号身份参加的,那么如何查看'我'这个字符的编码呢?直接输出 System.out.println('我'+0);

java 复制代码
class test02{
    public static void main(String[] args){
     System.out.println('我'+0);   //25105
     char c= 25105;                
     System.out.println(c);       //我
     System.out.println((char)8888888); //?
    }

接下来就是JAVA中的关键字:

1、final

复制代码
 数据:声明数据为常量,可以是编译时常量,也可以是在运行时被初始化后不能被改变的常量。
    arduino 复制代码
    对于基本类型,final 使数值不变;
    arduino 复制代码
    对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的。

    2、方法

    • private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方法不是重写基类方法,而是在子类中定义了一个新的方法。 3、类
    复制代码
        声明类不允许被继承

2、static

  • 1. 静态变量

  • 静态变量: 又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。

  • 实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死。

  • 2. 静态方法

静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法(abstract)。只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字。

-3. 静态语句块

静态语句块在类初始化时运行一次。

-4. 静态内部类

非静态内部类依赖于外部类的实例,而静态内部类不需要。

-5. 静态导包

在使用静态变量和方法时不用再指明 ClassName,从而简化代码,但可读性大大降低。

-6. 初始化顺序 存在继承的情况下,初始化顺序为:

  • 父类(静态变量、静态语句块)
  • 子类(静态变量、静态语句块)
  • 父类(实例变量、普通语句块)
  • 父类(构造函数)
  • 子类(实例变量、普通语句块)
  • 子类(构造函数)

顺便一提,在运行时多态的优先级为:在继承链中对象方法的调用存在一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。

相关推荐
Victor3568 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
Victor3568 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
灰子学技术9 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
Gogo81610 小时前
BigInt 与 Number 的爱恨情仇,为何大佬都劝你“能用 Number 就别用 BigInt”?
后端
fuquxiaoguang10 小时前
深入浅出:使用MDC构建SpringBoot全链路请求追踪系统
java·spring boot·后端·调用链分析
毕设源码_廖学姐11 小时前
计算机毕业设计springboot招聘系统网站 基于SpringBoot的在线人才对接平台 SpringBoot驱动的智能求职与招聘服务网
spring boot·后端·课程设计
野犬寒鸦12 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
逍遥德13 小时前
如何学编程之01.理论篇.如何通过阅读代码来提高自己的编程能力?
前端·后端·程序人生·重构·软件构建·代码规范
MX_935914 小时前
Spring的bean工厂后处理器和Bean后处理器
java·后端·spring
程序员泠零澪回家种桔子15 小时前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构