文章目录
一、static变量
01、静态:static
-
静态变量
-
静态的意义:在程序中类加载时,把静态的成员加载到方法区下的静态区域中
-
静态变量的定义:
-
static String 变量名; //静态变量都有默认值
-
-
静态变量的使用:
-
类名.静态成员变量="值";//赋值 数据类型 变量名 = 类名.静态成员变量;//取值
-
-
静态变量的特点:
- 共享数据(方法区中仅有一份)
-
-
静态方法
-
静态方法的定义:
-
public static 返回值类型 方法名(参数){ // }
-
-
静态方法的使用:
-
类名.静态成员方法(实参);
-
-
静态方法使用时的特点:
- 当静态方法中要访问外部的变量或调用外部的方法时:
- 变量,必须是静态变量
- 方法,必须是静态方法
- 非静态方法:可以访问非静态内容、也可以访问静态内容
- 当静态方法中要访问外部的变量或调用外部的方法时:
-
02、工具类:
- 在开发中,多数程序都需要使用到某个功能或业务时,可以把共同要使用的内容抽取为:工具类
- 在Java中:Arrays(针对数组的工具类)、Math(针对数学运算的工具类)
- 特点:
- 静态方法
- 不让实例化(私有的构造方法)
03、静态方法的特点:
- 静态方法,只能访问静态内容(静态成员变量、静态成员方法)
非静态方法:
-
可以访问非静态内容
-
可以访问静态内容
二、内部类
-
成员内部类
-
语法格式:
-
public class OuterClass{ private String name; public void method(){ } //成员内部类 class InnerClass{ } }
-
-
实例化成员内部类:
-
外部类.内部类 对象 = new 外部类().new 内部类();
-
-
-
匿名内部类
-
语法格式:
-
new 父类/接口(){ //重写父类/接口中方法 }
-
匿名内部类的本质:没有名字的子类对象
-
-
作用:
- 简化代码书写
- 可以省略子类的创建
- 简化代码书写
-
应用方式:
-
1、当调用父类/接口中的方法一次时
-
new 接口(){ //重写方法 public void method(){ /// } }.method();
-
-
2、作为参数
-
//方法 public void show(InterA a){ a.method(); } //调用方法 show(new Inter(){ public void method(){ } });
-
-
3、作为返回值
-
-
01、成员内部类
-
在一个类中包含了另一个类,内部类书写在成员位置上
-
实例化:
-
外部类名.内部类名 对象 = new 外部类().new 内部类(); //内部类访问外部类中的成员: 外部类名.this.成员
-
02、局部内部类
外部类中,方法外定义的类(略)
匿名内部类
-
作用:简化程序中的代码书写(可以省略子类的创建)
-
语法:
-
new 父类/接口(){ //重写父类/接口中的方法 }
-
-
应用场景:
-
调用方法一次
-
new 接口(){ //重写方法 }.重写后的方法();
-
-
作为参数
-
public void method(Inter a){ } method(new Inter(){ //重写接口中的方法 });
-
-
作为返回值
-
public Inter get(){ return new Inter(){ //重写方法 }; }
-
-
匿名内部类实例
interface HelloInter{
public abstract void sayHello(String name);
}
//实现类
class HelloInterImpl implements HelloInter{
//重写sayHello方法
public void sayHello(String name){
///
}
}
//实例化 实现类
HelloInterImpl hello = new HelloInterImpl();
hello.sayHello();
匿名内部类: 简化代码 接口、抽象类的子类实例化
new HelloInter{
//重写sayHello方法
public void sayHello(String name){
///
}
}.sayHello("张三");
public void showHello(HelloInter helloInter){
helloInter.sayHello("");
}
HelloInterImpl hello = new HelloInterImpl();//实例化接口的实现类
showHello( hello);//把子类对象传递给方法中
showHello( new HelloInter(){
//重写
public void sayHello(){
}
});
三、代码块
01、静态代码块
-
语法格式:
-
public class 类{ static{ //静态代码块 } }
-
-
特点:
- 随着类的加载而执行,仅执行一次(类只会被JVM加载一次)
-
应用场景:
- 给静态成员初始化值
- 在没有创建对象之前,可以提前初始化一些数据
- 给静态成员初始化值
02、构造代码块
-
语法格式:
-
public class 类{ private String name; public void setName(String name){ } { //构造代码块 } }
-
-
特点:
- 当创建对象时,JVM会自动调用构造方法执行,而每一次执行构造方法前会先执行:构造代码块
-
应用场景:
- 把多个构造方法中共性的代码,抽取到构造代码块中(通常用于非静态成员变量初始化)
03、局部代码块
-
语法格式:
-
static{ //局部代码块 { } }
-
-
作用:限定作用域
四、枚举Enum
-
语法格式:
-
public enum 枚举名{ 成员1,成员2,..; }
-
-
使用枚举:
-
枚举名.成员;
-
-
枚举的应用场景:
- 当程序中存在固定范围的数据时,可以使用枚举来定义
- 例:性别(男、女)
- 当程序中存在固定范围的数据时,可以使用枚举来定义
五、常用API
Date类
使用类来描述事物:
public class 学生{
//属性:
String 姓名;
int 年龄;
double 成绩;
java.util.Date 出生日期; //2020-2-20
}
结论: 当程序中存储日期数据时,使用Date类型
DateFormat类
作用:
- 把String类型 转换为 Date类型 : 解析
- 把Date类型 转换为 String类型 : 格式化
java.text.DateFormat类:
- 是一个抽象类(不能实例化)
- 通常是使用子类:java.text.SimpleDateFormat类
实例化方式:
//多态的格式:
DateFormat df = new SimpleDateFormat("日期模式字符串")
//日期模式:
y:年
M:月
d:日
H:时(24小时制)
m:分
s:秒
日期模式示例:
"yyyy-MM-dd" 对应格式: 2020-03-20
"HH:mm:ss" 对象格式:16:17:20
"yyyy/MM/dd HH:mm:ss" 2020/03/20 16:17:20
DateFormat中的常用方法:
-
Date => String
-
public String format(Date date)
-
-
String => Date
-
public Date parse(String strDate)
-
Calendar类
java.util.Calendar类:
- 是一个抽象类(不能实例化)
- 使用Calendar类中的功能,代替Date类中的过时功能
Calendar类的实例化方式:
-
直接使用子类实例化
-
Calendar c = new GregorianCalendar();
-
-
使用静态方法:getInstance()
-
Calendar c = Calendar.getInstance(); //本质:getInstance()方法的底层代码: new GregorianCalendar()
-
Calendar类中常用方法:
-
public int get(int field) //field表示的是一个字段值(在Calendar中是一个静态常量值)
-
//获取日历对象中的:年、月 Calendar c = Calendar.getInstance(); int year = c.get( Calendar.YEAR );//获取年 int month = c.get( Calendar.MONTH );//获取月
-
-
public void set(int field , int value)
-
//把日历中的年份设置为:2019年 Calendar c = Calendar.getInstance(); c.set( Calendar.YEAR , 2019 );
-
-
public void add(int field , int value)
-
//在当前日期的基础上,向后+3天 Calendar c = Calendar.getInstance(); c.add( Calendar.DAY_OF_MONTH , 3);//向后+3天 c.add( Calendar.DAY_OF_MONTH , -3);//向前-3天
-
Math类
Math类:
- 类:工具类。 针对数学运算的工具类。封装大量的静态方法
- 实例化: 不需要实例化。 直接使用类名调用方法
- 常用方法:
- 求最值:max() 、 min()
- 四舍五入:round()
- 向上/向下取整
示例:
public class MathDemo1 {
public static void main(String[] args) {
System.out.println("最大值:"+Math.max(21,20));
System.out.println("最小值:"+Math.min(21,20));
System.out.println("四舍五入:"+Math.round(3.76));
System.out.println(Math.ceil(3.01));
}
}
System类
类: java提供的和系统相关的工具类。
实例化: 不需要实例化。 直接使用类名调用方法
常用方法:
- currentTimeMillis() //获取当前系统时间的毫秒值
示例:
public class SystemDemo1 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int count=0;
for (int i = 0; i < 100000; i++) {
if(i%2==0){
count++;
}
}
long endTime =System.currentTimeMillis();
System.out.println("执行了:"+(endTime-startTime)+"毫秒");
}
}
六、总结
-
static
- 是java中的修饰符号,可以用来修饰:变量、方法
- 修饰变量:静态变量
- 修饰方法:静态方法
- 静态的特点:
- 随着类的加载而出现在内存的方法区中(静态区域下)
- 静态内容在内存中只存在一份(共享) 【不论创建多个对象,都只有一个】
- 静态在开发中的应用:
- 静态常量工具类
- 静态方法工具类
- 是java中的修饰符号,可以用来修饰:变量、方法
-
代码块
-
静态代码块
-
特点:随着类的加载而执行(在加载类时执行的代码)
-
作用:通常用于对静态内容初始化(静态变量初始化值)
-
格式:
-
public class 类{ static{ } }
-
-
-
构造代码块
-
特点:在构造方法执行之前,会执行(每一个构造方法执行时,都会先调用构造代码块)
-
作用:多个构造方法中共性的内容,抽取到构造代码块中(非静态变量初始化)
-
格式:
-
public class 类{ private String name; { } public 类(){ } }
-
-
-
局部代码块
-
-
枚举
-
作用:用来对程序中固定范围的数据进行约束
-
定义:
-
public enum 枚举名{ 成员1,成员2,...; }
-
-
使用:
-
枚举名.成员名;
-
-
-
Object类
-
类: Object类是Java体系中的最顶层父类(所有的类都直接或间接继承Object类)
-
实例化: public Object()
-
常用方法:
- public String toString() //把对象转换为字符串
- public boolean equals(Object ) //比较两个对象是否相同(比较的是内存地址)
-
Object类中equals(Object obj) 和 Objects工具类中的equals(Object obj1 , Object obj2) 的区别:
-
//调用Object类中的equals Student stu = null; stu.equals( new Student("张三",20) );//运行结果:报错。 空指针异常 //结论:Object类中的equals方法会出现空指针异常 //Objects类中的equals Student stu = null; Objects.equals( stu , new Student("张三",20) );//可以正常运行,不会引发 空指针异常 //运行结果:false
-
-
Date类
- 类: 在java程序中用来存储日期数据的类型
- 实例化: public Date() 、 public Date(long time)
- 常用方法:
- void setTime(long time)
- long getTime()
-
DateFormat类
- 类: 用来实现String类型和Date类型之间互相转换。抽象类(不能实例化)
- 实例化: DateFormat df = new SimpleDateFormat(“日期模式字符串”)
- 常用方法:
- String format(Date date) // Date => String
- Date parse(String strDate) // String => Date
-
Calendar类
- 类: 日历类。 用来代替Date类中的已过时的方法。抽象类
- 实例化: Calendar c = Calendar.getInstance();
- 常用方法:
- void set(int field , value) //给日历类对象中的数据设置值 (覆盖值)
- int get( int field) //获取日历类对象中的数据值
- void add( int field , int value) //修改日历类对象中的数据值(原值上加或减)