黑马程序员技术交流社区

标题: [成都校区]日常笔记 [打印本页]

作者: Morn明    时间: 2018-11-15 09:42
标题: [成都校区]日常笔记
Object类java.lang.Object 类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。
在对象实例 化的时候,最终找的父类就是Object。
如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:
public class MyClass /*extends Object*/ {      // ...
}
Object类中方法①toString方法②equals方法
①toStringpublic String toString()
toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。
覆盖重写
如果不希望使用toString方法的默认行为,(一般开发中都是自己重写toString方法)
在对象中重写toString()方法
public String  toString() {
    return "学生信息:" + "姓名:"  + name + ",年龄:" + age;
}
②equalspublic boolean equals(Object obj)
默认地址比较
如果没有覆盖重写equals方法,那么Object类中默认进行 ==  运算符的对象地址(地址值)比较,只要不是同一个对象,结果必然为false。
自定义重写比较可以使用快捷键 alt+insert ,并选 择  equals() and hashCode() 进行自动代码生成
@Override
public boolean equals(Object o) {
    if (this ==  o) return true; ////提高代码运行速率
    if (o == null || getClass() != o.getClass()) return  false;//代码健壮性
    Student student = (Student) o;
    return age == student.age &&
            Objects.equals(name,  student.name);
}
日期时间类java.util.Date 类  表示特定的瞬间,精确到毫秒。
public Date() :分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date)  :分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元 (epoch)(时间原点)”,
public long getTime()  把日期对象转换成对应的时间毫秒值。long S  = new Date().getTime();
即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒
import java.util.Date;
public class Demo01Date {
    public static void main(String[] args) {
        // 创建日期对象,把当前的时间
        System.out.println(new Date()); // Tue Jan 16 14:37:35 CST 2018
        // 创建日期对象,把当前的毫秒值转成日期对象
        System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970
        // 把当前的系统日期转成毫秒值s
        long s = new Date().getTime();
        System.out.println(s);//1541852026818
    }
}
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行
了覆盖重写,所以结果为指定格式的字符串
DateFormat类
java.text.DateFormat   是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转  换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,从Date对象转换为String对象。 SimpleDateFormat里的format方法
解析:按照指定的格式,从String对象转换为Date对象。SimpleDateFormat里的parse方法
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类  java.text.SimpleDateFormat 。这个类需要一个 模式(格式)来指定格式化或解析的标准。
构造方法为:public SimpleDateFormat(String pattern)  :用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式。
格式规则
yMdHms
    //将Date日期格式化   日期===>文本(SimpleDateFormate中format方法)
    //步骤1,创建SimpleDateFormate对象,并传入格式(例如yy-MM-dd  HH:mm:ss)
    //2,调用SimpleDateFormat中的format方法,将Date数据格式化为想要的格式的字符串
    private static void one() {
        Date d1 = new Date();
        System.out.println(d1);
        SimpleDateFormat sd1 = new SimpleDateFormat("yyyy年MM月dd  HH时mm分ss秒");
        String str = sd1.format(d1);
        System.out.println(str);
    }
    //将String字符串转为Date日期类型(解析)  文本===>日期(SimpleDateFormate中parse方法)
    //步骤1,创建SimpleDateFormat对象,并传入文本格式
    //2,调用SimpleDateFormat中的parse方法,将符合格式的字符串转化为Date数据格式
    /*注意--- public Date parse(String  source) throws ParseException
             parse方法声明了一个异常叫ParseException
             如果字符串和构造方法的模式不一样,那么程序就会抛出异常
             调用一个抛出了异常的方法,就必须的处理这个异常,要么throws继续抛出这个异常,要么try  catch自己处理
    */
    private static void two() throws ParseException {
        String str = "2018-1-1";
        SimpleDateFormat sd2= new SimpleDateFormat("yyyy-MM-dd");
        Date d1 = sd2.parse(str);    //将记得要抛ParseException异常
        System.out.println(d1);
    }
}
Calendar类java.util.Calendar  是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装 为静态成员变量,方便获取。
日历类就是方便获取各个时间属性的。
获取方式
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子 类对象,如下:
Calendar静态方法    Calendar cal =  Calendar.getInstance();
public static Calendar getInstance()  :使用默认时区和语言环境获得一个日历
例如:
常用方法
根据Calendar类的API文档,常用方法有:
public int get(int field)  :返回给定日历字段的值。
public void set(int field, int value)  :将给定的日历字段设置为给定值。
public abstract void add(int field, int amount)  :根据日历的规则,为给定的日历字段添加或减去指
定的时间量。
public Date getTime()  :返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
Calendar类中提供很多成员常量,代表给定的日历字段:
月(从0开始,得+1使用)月中的天(几号)时(12小时)时(24小时制)周中的天(周几,周日为1可以减1使用)
YEARMONTHDAY_OF_MONTHHOURHOUR_OF_DAYMINUTESECONDDAY_OF_WEEK
get和set方法
public static void main(String[] args) {
    // 创建Calendar对象
    Calendar cal =  Calendar.getInstance();
    // 获得月
    int month = cal.get(Calendar.MONTH) + 1;
    // 获得日
    int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
    // 设置年
    cal.set(Calendar.YEAR, 2020);
    // 获得年
    int year = cal.get(Calendar.YEAR);
    System.out.print(year + "年" +  month + "月" + dayOfMonth + "日");
}
add方法add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量
public static void main(String[] args) {
    // 创建Calendar对象
    Calendar cal =  Calendar.getInstance();
    // 获得月
    int month = cal.get(Calendar.MONTH) + 1;
    // 获得日
    int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
    // 获得年
    int year = cal.get(Calendar.YEAR);
    System.out.println(year + "年" +  month + "月" + dayOfMonth + "日");
    //2018年11月11日
    // 使用add方法
    cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
    cal.add(Calendar.YEAR, -3); // 减3年
    // 获得月
    int month1 = cal.get(Calendar.MONTH) + 1;
    // 获得日
    int dayOfMonth1 = cal.get(Calendar.DAY_OF_MONTH);
    // 获得年
    int year1 = cal.get(Calendar.YEAR);
    System.out.println(year1 + "年" +  month1 + "月" + dayOfMonth1 + "日");
    // 2015年11月13日
}
getTime方法Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。西方星期的开始为周日,中国为周一。
public static void main(String[] args) { 在Calendar类中,月份的表示是以0-11代表1-12月。
    Calendar cal = Calendar.getInstance(); 日期是有大小关系的,时间靠后,时间越大。
    Date date = cal.getTime();
    System.out.println(date);
    //Sun Nov 11  09:02:50 CST 2018
}
System类java.lang.System 类中提供了大量的静态(直接方法名点调用)方法,可以获取与系统相关的信息或系统级操作,在System类的API文  档中,常用的方法有:
public static long currentTimeMillis() :返回以毫秒为单位的当前时间。可用来检测代码运行的时间
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)  :将
数组中指定的数据拷贝到另一个数组中。
currentTimeMillis(返回值是long类型)
/**public static void main(String[] args) {
* 输出100天后星期几    long fistTime = System.currentTimeMillis();
* 月份默认从0开始,如果想拿正常的月份需要+1    System.out.println("第一次"+fistTime);
* 星期值默认从星期天(1)开始算第一天,如果是正常国内显示需要-1    //第一次1542013360291
*/    Calendar ca =  Calendar.getInstance();
    ca.add(Calendar.DATE, 1);
    int dayOfWeek=ca.get(Calendar.DAY_OF_WEEK);
    System.out.println("100天后星期" + dayOfWeek);
    //100天后星期3
    System.out.println("第二次"+System.currentTimeMillis());
    //第二次1542013360518
}
arraycopy方法(复制操作的是数组)
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)  :将 数组中指定的数据拷贝到另一个数组中。
参数序号参数名称参数类型参数含义public static void main(String[] args) {
1
srcObject源数组    int arr1[] = {1, 2, 3, 4, 5};
2
srcPosint源数组索引起始位置    int arr2[] = new int[5];
3
destObject目标数组    System.arraycopy(arr1, 1,  arr2, 1, 3);
4
destPosint目标数组索引起始位置     System.out.println(Arrays.toString(arr2));
5
lengthint复制元素个数}//[0,  2, 3, 4, 0]
StringBuilder类 由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。例如:
在API中对String类有这样的描述:字符串是常量,它们的值在创建后不能被更改。  
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png
  
根据这句话分析我们的代码,其实总共产生了三个字符串,即  "Hello" 、 "World" 和 "HelloWorld" 。引用变量s 首先指向  Hello 对象,
最终指向拼接出来的新字符串对象,即 HelloWord  。
public static void main(String[] args) {
    String s = "Hello";
    s += "World";
    System.out.println(s);
}
由此可知,如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,
既耗时,又浪费空间。为了解 决这一问题,可以使用  java.lang.StringBuilder 类。
StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,(字符串的容器)
通过某些方法调用可以改变该序列的长度和内容。 (默认16字符空间,超过自动扩充)
构造方法
public StringBuilder()  :构造一个空的StringBuilder容器。
public StringBuilder(String str) :构造一个StringBuilder容器,并将字符串添加进去。
public static void main(String[] args) {
    StringBuilder sb1 = new  StringBuilder();
    System.out.println(sb1); // (空白)
    // 使用带参构造
    StringBuilder sb2 = new StringBuilder("test1");
    System.out.println(sb2); // test1
}
常用方法
public StringBuilder append(...)  :添加任意类型数据的字符串形式,并返回当前对象自身。
public String toString() :将当前StringBuilder对象转换为String对象。
append(...) 方法备注:StringBuilder已经覆盖重写了Object当中的toString方法。
public static void main(String[] args) {
    //创建对象
    StringBuilder builder  = new StringBuilder();
    //public  StringBuilder append(任意类型)
    StringBuilder  builder2 = builder.append("hello");
    //对比一下
    System.out.println("builder:" + builder);//builder:hello
    System.out.println("builder2:" + builder2);//builder2:hello
    System.out.println(builder == builder2); //true
    // 可以添加 任何类型
    builder.append("hello");
    builder.append("world");
    builder.append(true);
    builder.append(100);
    // 在我们开发中,会遇到调用一个方法后,返回一个对象的情况。然后使用返回的对象继续调用方法。         
    // 这种时候,我们就可以把代码现在一起,如append方法一样,代码如下
    //链式编程
    builder.append("hello").append("world").append(true).append(100);
    System.out.println("builder:" + builder);
    //builder:hellohelloworldtrue100helloworldtrue100
}
toString方法通过toString方法,StringBuilder对象将会转换为不可变的String对象。
public static void main(String[] args) {
    // 链式创建
    StringBuilder sb = new StringBuilder("Hello").append("World").append("Java");
    // 调用方法
    String str =  sb.toString();
    System.out.println(str); // HelloWorldJava
}
包装类 
Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,
然而很多情况,会创建对象使用,因为 对象可以做更多的功能
基本数据类型byteshortintlong double floatcharboolean
ByteShortIntegerLong DoubleFloatCharacterBoolean
包装类作用:①提供一些有用字段Long.MAX_VALUE②还有一些可进行类型转换的方法
装箱与拆箱基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“
装箱:从基本类型转换为对应的包装类对象。
拆箱:从包装类对象转换为对应的基本类型。
自动装箱与自动拆箱由于我们经常要做基本类型与包装类之间的转换,从Java 5(JDK  1.5)开始,
基本类型与包装类的装箱、拆箱动作 可以自动完成。
public static void main(String[] args) {
     Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
     i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱)  i.intValue() + 5;
     // 加法运算完成后,再次装箱,把基本数值转成对象。
}
基本类型与字符串之间的转换
基本类型转换为String基本类型直接与””相连接即可;如:34+""
String转换成对应的基本类型
除了Character类之外,其他所有包装类都具有parseXxx静态方法可以将字符串参数转换为对应的基本类型:
public static byte parseByte(String s) :       将字符串参数转换为对应的byte基本类型。
public static short parseShort(String s) :     将字符串参数转换为对应的short基本类型。
public static int parseInt(String s) :         将字符串参数转换为对应的int基本类型。
public static long parseLong(String s) :       将字符串参数转换为对应的long基本类型。
public static float parseFloat(String s) :     将字符串参数转换为对应的float基本类型。
public static double parseDouble(String s) :   将字符串参数转换为对应的double基本类型。
public static boolean parseBoolean(String s) : 将字符串参数转换为对应的boolean基本类型。
public static void main(String[] args) {注意:如果字符串参数的内容无法正确转换为对应的基本类型
int num = Integer.parseInt("100");,则会抛出  java.lang.NumberFormatException 异常。
}//字符串100转为int数据类型Integer






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2