包装类
针对八种基本定义相应的引用类型—包装类(封装类)
应用:
字符串转换成基本数据类型
通过包装类的构造器实现:
int i = new Integer(“12”);
通过包装类的parseXxx(String s)静态方法:
Float f = Float.parseFloat(“12.1”);
基本数据类型转换成字符串
调用字符串重载的valueOf()方法:
String fstr = String.valueOf(2.34f);
更直接的方式:
String intStr = 5 + “”
toString
笔记:打印a对象就是打印a.toString(),
可以对toString()方法就行重写。
public class MyDate {
/**
* 有参构造器
* @param year
* @param month
* @param day
*/
public MyDate(int year,int month,int day){
this.year = year;
this.month = month;
this.day = day;
}
int year;//三个成员变量
int month;
int day;
@Override
public boolean equals(Object obj) {
int flag = 1;
if(obj instanceof MyDate){
MyDate md = (MyDate) obj;
flag = 0;
if(this.year != md.year){
flag += 1;
}
if(this.month != md.month){
flag += 1;
}
if(this.day != md.day){
flag += 1;
}
}
if(flag == 0){
return true;
}else{
return false;
}
}
// @Override
// public String toString() {
// String str = this.year + "-" + this.month + "-" + this.day;
// return str;
// }
public static void main(String[] args) {
MyDate m = new MyDate(2020,03,30);//有参构造,这个()里面要填参数
System.out.println(m);
System.out.println(m.toString());
}
}
打印结果为:
day08.MyDate@279f2327
day08.MyDate@279f2327
把代码中注释去掉,则打印结果为:
2020-3-30
2020-3-30
关键字static
访问对象的时候,我们需要实例化,然后这样做
对象名.属性
对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
那我们也可以?????
在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性。相应的方法设置为类方法。
类名.属性
如果想让一个类的所有实例共享数据,就用类变量!
这就是静态变量:
静态方法:
类名.方法名
public class Chinese {
static String country;//斜体的,类变量。static修饰,静态变量
String name;//实例变量
int age;//实例变量
public static void test() {
System.out.println("这是一个静态方法");
}
public static void main(String[] args) {
Chinese.test();//不用实例化,也能调用
Chinese.country= "中国";//不用实例化,也能调用
System.out.println(Chinese.country);
}
}
在Java类中,可用static修饰属性、方法、代码块、内部类
被修饰后的成员具备以下特点:
1随着类的加载而加载
2优先于对象存在
3修饰的成员,被所有对象所共享
4访问权限允许时,可不创建对象,直接被类调用
因为不需要实例就可以访问static方法,因此static方法内部不能有this。(也不能有super ? YES!)
单例 (Singleton)设计模式
设计模式就是编程套路
单例,就是一个实例化对象。
适用:一般都是new对象太费劲!或者是频繁的new新对象没有意义
饿汉单例模式
package day08;
/**
* 饿汉单例模式
* @author jkjkjk
*
*/
public class Single {
//构造方法private
private Single() {
}
//只new一次
private static Single single = new Single();
public static Single getInstancd() {
return single;
}
public static void main(String[] args) {
// Single s = new Single();不可行
Single s1 = Single.getInstancd();
Single s2 = Single.getInstancd();
Single s3 = Single.getInstancd();
Single s4 = Single.getInstancd();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
}
打印结果:
day08.Single@279f2327
day08.Single@279f2327
day08.Single@279f2327
day08.Single@279f2327
因为Single.getInstancd()是指向single.
懒汉式
最开始,对象是null,直到有第一个人调用我,才new一个对象,之后都用这个对象了
package day08;
public class Single1 {
//先私有化构造方法,让外边不能直接new对象
private Single1(){
}
private static Single1 s1 = null;
public static Single1 getInstance() {
if(s1 == null) {//如果是空,那么实例化
s1 = new Single1();
}
return s1;
}
public static void main(String[] args) {
// Single s = new Single();
Single1 s1 = Single1.getInstance();
Single1 s2 = Single1.getInstance();
Single1 s3 = Single1.getInstance();
Single1 s4 = Single1.getInstance();
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);
}
}
打印结果:
day08.Single1@279f2327
day08.Single1@279f2327
day08.Single1@279f2327
day08.Single1@279f2327
饿汉和蓝汉的区别就是什么时候new对象。
main方法
public 公用的
static 静态的
void 没有返回值的
main方法名
形参是字符串数组,多个
由于java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数。
子曰:温故而知新!