1.隐式转换和显示转换
隐式转换是指低级数据类型向高级数据类型转换时,会自动转换为高级数据类型。
显示转换是指高级数据类型向低级类型转换时,要进行强制转换。但是会存在数据精度丢失的风险。
例如:
自动类型转换:
由小到大
byte short char ----int ----long --- float --- double
byte b = 10;
int a = b;
强制类型转换:
一般由大到小
int a = 10;
byte b = a;//错误
由小到大
byte short char ----int ----long --- float --- double
byte b = 10;
int a = b;
强制类型转换:
一般由大到小
int a = 10;
byte b = a;//错误
byte b = (byte)a;//正确,有可能损失精度
隐式转换规则:
byte short char 能自动转换成int类型
byte short char int 能自动转换成long;
byte short char int long能自动转换成float;
byte short char int long float能自动转化成double;
2.静态static
1)被static修饰的成员或者方法被称为静态
静态有以下特点:
(1)静态随着类的加载而加载,随着类的消失而消失
(2)静态能直接用类名调用
(3)静态被类的所有对象共享
(4)静态优先于对象而存在。
2)静态函数的调用方法:
(1)只能调用静态成员或者静态方法
(2)不能调用非静态成员或者非静态方法
总结:静态函数只能调用静态成员和方法,非静态函数没有限制
3)静态的应用:工具类的使用(构造函数被私有化,成员和方法被静态static修饰)
4) 静态成员方法不能被重写
3.代码块:
1)静态代码块:类一旦被加载,静态代码块会被执行。(比如,类中的main函数被执行。或者类的对象被创建,但是static只执行一次,多个对象被创建,类也只被加载一次)
2)构造代码块:(优先于构造函数执行,当构造函数被执行的时候,优先执行构造代码块。)
3)局部代码块:限制变量,减少内存
eg:
package com.itheima.utils;
/*
*
* 执行结果:BlockDemo代码块被执行---main函数被执行---Student静态代码块被执行---Student构造代码块被执行
*/
public class BlockDemo {
static
{
System.out.println("BlockDemo代码块被执行");
}
{
System.out.println("BlockDemo构造代码块被执行");
}
public BlockDemo()
{
}
public static void main(String[] args) {
System.out.println("main函数被执行");
Student s = new Student();
}
}
class Student
{
static
{
System.out.println("Student静态代码块被执行");
}
{
System.out.println("Student构造代码块被执行");
}
public Student()
{
}
}