Static
静态关键字可是使用的位置:类,成员变量,成员方法,构造方法,局部变量。主要作用:让成员属于类而不是对象,被所有对象共享。主要用于共享数据。
由static关键词修饰的变量或方法会在内存静态区中单独生成一份用于调用。
区别:
没有Static修饰的room变量存储位置
room变量会保存在堆中根据new的数量分配多个内存空间来存放room属性。
Static修饰的room变量存储位置
用static修饰成员变量,称为静态变量或者类变量,是属于类不再属于对象自己。存放在静态存储区中,只有一份,被所有对象共享。方法同理。
静态修饰的成员访问:可以通过对象访问,也可以通过类名访问。
静态修饰成员创建过程:在第一次创建具有静态变量的类对象时,会先给所有静态成员分配内存,然后再给普通成员分配内存,再执行构造方法。之后创建对象静态成员将不再从新分配只分配一次。
静态变量规则:
静态成员可以访问静态成员不能访问非静态成员。因为静态成员比非静态成员先加载。
非静态成员可以访问静态成员。
权限修饰符
权限修饰符用于修饰类,成员变量,成员方法,构造方法(其中类只能用public 和 空白修饰)
代码块
概念:由{}包括的代码,三类,构造代码块,静态代码块,局部代码块
构造代码块:在类的全局变量的位置创建
在类的构造方法之前执行,所以可以用于完成变量的初始化,但是因为没法接受参数,不够实用所以一般不用它初始化数据。
静态代码块:static修饰的代码块,也在全局变量的位置,因为是静态的所以会在类除不同变量加载之前加载,一般用于对静态变量进行初始化。
局部代码块:在方法中使用的代码块,正常流程执行,用于控制对象的生命周期,早点释放内存。只用一次的变量可以在代码块中定义,在代码块执行完毕后内存释放,而不用等到整个方法执行完成释放。
部分常见的类
1.Object类
所有对象的父类,其中有几个比较常用的方法,也就是所有的类都有的方法。
toString(); 返回类的完全限定名和16位内存地址(一般重写后会返回类中的属性)
equals():返回两个对象是否相等(比较内存地址,重写后一般比较内容)
2.Date,DateFormat类
时间类Date
构造方法
public Date() 用当前系统时间构建一个date对象
public Date(long date) 表示距离0点 一个毫秒值构建date对象
常用方法
public long getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
public void setTime(long time) 用毫秒值修改date日期
日期格式化类DateFormat
public SimpleDateFormat(String pattern)
参数的格式设置情况有(其中H为24小时制,h为12小时制)
有个直接子类: SimpleDateFormat:常用方法
public Date parse(String s)
public String format(Date date)
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date date = new Date();
String s = simpleDateFormat.format(date);
System.out.println(s);//xxxx年xx月xx日
String time = ”2020-01-22“;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse(time);
3. 日历类_Calendar
创建方式:Calendar rightNow = Calendar.getInstance();
常用方法
- public int get(int field) 获取日期字段值
- public void set(int field,int value) 设置日期字段的值
- public abstract void add(int field,int amount) 给日期字段添加/减少值
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH) + 1;
int day = instance.get(Calendar.DAY_OF_MONTH);
int hour = instance.get(Calendar.HOUR_OF_DAY);
int min = instance.get(Calendar.MINUTE);
int sec = instance.get(Calendar.SECOND);
int week = instance.get(Calendar.DAY_OF_WEEK);
//获得的星期是周日开始的,要自己转换。
//简单的例子 想知道2020-03-03 是星期几?
Calendar instance1 = Calendar.getInstance();
instance1.set(Calendar.YEAR,2020);
instance1.set(Calendar.MONTH,3 - 1);
instance1.set(Calendar.DAY_OF_MONTH,3);
int i = instance1.get(Calendar.DAY_OF_WEEK);
System.out.println("2020-03-03,是:" + getWeek(i));//getWeek()是自己写的转换方法。
4.Math数学类
- public static int abs(int a) 获取参数a的绝对值:
- public static double ceil(double a) 向上取整
- public static double floor(double a) 向下取整
- public static double pow(double a, double b) 获取a的b次幂
- public static long round(double a) 四舍五入取整
5.System类
提供了一些获取系统信息的类
* public static void exit(int status) 终止当前正在运行的 Java 虚拟机。
* public static long currentTimeMillis() 获取当前系统时间对应的毫秒值
* public static void arraycopy(Object src, 源数组
* int srcPos, 起始索引
* Object dest, 目标数组
* int destPos, 放到目标数组中哪个索引位置
* int length) 复制多少个元素
* public static void gc() 运行垃圾回收器。
* System.exit(0);//0表示正常退出
6.BigDecimal类
用于大数据计算的,解决浮点数精度损失问题.
7.Arrays类
常用方法
public static void sort(int[] a):按照数字顺序排列指定的数组
public static String toString(int[] a):返回指定数组的内容的字符串表示形式
8.包装类
基本数据类型对应的引用数据类就是包装类
自动装箱和自动拆箱:就是基本数据类型自动和引用数据类型也就是包装类的转换(JDK1.5以后)
Integer integer3 = 1000;//编译后其实 Integer.valueOf(1000) 自动装箱
int a = integer3;//可以直接将包装类赋值给基本类型 integer3.intValue() 自动拆箱
//非自动装箱也拆箱
Integer integer = new Integer(10);//将基本类型转换为包装类
System.out.println(integer);
int i = integer1.intValue();//拆箱
System.out.println(i);
常用的一些方法
和字符串之间的相互转换
String str = "100";
int i1 = Integer.parseInt(str);
System.out.println(i1);//字符串转Integer
String h = "1.78";
double v = Double.parseDouble(h);
System.out.println(v);//字符串转Double
int s = 100;
String s1 = s + "";
String str2 = Integer.toString(s);
System.out.println(str2);//基本类型转字符串的两种方式