普通代码块
代码块就是在类中用{}括起来的代码
相当于一个无名的普通方法,不能返回值,不能有任何的return关键字
1.代码块不能被调用
2.一般用于初始化数据,和构造器是同样的作用
3.它在实例化的时候会被自动调用,只能调用一次
4.实例化的时候,先执行代码块,再执行构造器
静态代码块
相当于静态方法
执行顺序:
静态代码块-普通代码块-构造器
静态代码块优先于main方法执行
静态资源只能调用静态其他资源
优先级最高,起到一种保护main方法的作用
构造器
是一种特殊的普通方法,用于初始化,只能用new关键字去调用
构造器不能被其他方法调用,但是构造器能调用其他方法,
并且构造器之间可以通过this和super互相调用
在本类的普通方法之间互相调用时,可以直接使用,不需要实例化
代码的执行过程及顺序:
将java文件编译为class文件
类加载器将当前类文件加载到内存中
将静态全局变量加载到常量池中
将类中的所有静态方法和静态代码块加入到静态方法区
先执行静态代码块
再执行main方法
静态代码块会优先执行,并且执行一次
内部类
分为3种
1.普通内部类
在类中声明的类叫做内部类
普通内部类中只有普通方法,不能创建静态方法
public class Clz{
//在类中声明类叫做内部类
public class InnerClz{
public void say(){
}
//普通内部类不能有静态方法
public static void sayhi()
{
//报错
}
}
public static void main(String[]args)
{
InnerClz clz=new Clz().new InnerClz();
clz.say();
}
}
调用时:
new 外部类().new内部类().new内部类()
2.静态内部类
static可以修饰类,但是只能修饰静态内部类
静态内部类可以声明静态方法和非静态方法
static作用域下的资源,只能调用外部其他的静态资源,非
静态资源一定要new
public class Clz{
private static int age;
//在类中类叫做内部类
//static作用域下的资源 只能调用外部其他的静态资源
public static class InnerClz{
public void say(){
age=3;
}
public static void sayhi()
{
}
}
public static void main(String[]args)
{
InnerClz clz=new Clz.InnerClz();
clz.say(); //调用普通方法
Clz.InnerClz.sayhi(); //调用静态方法
}
}
当静态方法中有普通方法和静态方法,需要调用普通方法时
new 外部类.静态内部类()
表示实例化的是外部类中的静态内部类
调用静态方法时:
外部类.静态内部类.方法()
3.匿名内部类
在方法中创建的类叫做匿名内部类
作用域只能在方法内部
这种类一般就是临时创建了一下,只能在此方法里面使用,它并不通用
匿名内部类类名不能是public
在匿名内部类中如果想要使用方法中局部变量,一定要将局部变量修饰为final
但是在jdk1.6之后,会自动设置为final
public class Clz{
public void say{
//1.临时创建类临时使用
Class Panda{
public void eat(){
System.out.print("我是熊猫..");
}
}
//临时创建临时用
new Panda().eat();
//2.临时实现接口 临时使用
new Fly(){
public void icanfly(){
//底层: JVM会自动创建一个名字叫做Clz$1的类 自动实现Fly的接口
}
}.icanfly();
}
}
interface Fly{
public void icanfly();
}
在一个类中只能有一个public类,要和文件名称保持一致
但内部类可以用public修饰
在内部类中可以访问外部类的属性
包装类
java.lang下
8个类 包装类
Number 抽象类 是Integer Short Byte Long Float Double类的超类 提供类型转换的方法
Integer int 方法全部都是整数相关的方法
Byte byte 方法全部都是字节相关的方法
Short short 方法全部都是短整数相关的方法
Long long
Float float
Double double
Boolean boolean
Character char
为什么会有包装类
包装类是为弥补基本数据类型没有方法而产生的
Integer.parseInt()将字符串转换为整数,前提是字符串里都是数字
包装类和String类很相似 他的数据都存放在常量池中
装箱 (把基本数据类型变成包装类)
拆箱 (把包装类变成基本数据类型)
int a=1;
Integer b=a;//装箱
int c=b;//拆箱
装箱后就可以使用方法了,拆箱后不能使用方法
Integer 中常用方法
valueOf(String) 将String转换int
ParseInt(String) 将String转换int
toString() 将整数转换为字符串
byteValue(int) 将int转换为byte
floatValue(int) 将int转换为float
doubleValue(int) 将int转换为double
shortValue(int) 将int转换为short
charValue(int)