从零开始的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)。

相关推荐
夜色呦1 小时前
现代电商解决方案:Spring Boot框架实践
数据库·spring boot·后端
爱敲代码的小冰1 小时前
spring boot 请求
java·spring boot·后端
java小吕布2 小时前
Java中的排序算法:探索与比较
java·后端·算法·排序算法
Goboy3 小时前
工欲善其事,必先利其器;小白入门Hadoop必备过程
后端·程序员
李少兄3 小时前
解决 Spring Boot 中 `Ambiguous mapping. Cannot map ‘xxxController‘ method` 错误
java·spring boot·后端
代码小鑫3 小时前
A031-基于SpringBoot的健身房管理系统设计与实现
java·开发语言·数据库·spring boot·后端
Json____3 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库
monkey_meng4 小时前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss4 小时前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
大鲤余4 小时前
Rust,删除cargo安装的可执行文件
开发语言·后端·rust