Java笔记01

1、主要学习主流javaee(包含javase)

2、优势:跨平台/可移植性、安全性、面向对象、简单性、高性能、分布式、多线程、健壮性

3、运行机制:编译型与解释性

        helloworld.java源程序---->javac---->字节码文件.class---->虚拟机JVM(java)---->解释执行

4、jar包:字节码文件打包,src:jdk源代码,bin存放二进制文件的目录,lib存放类库

5、(系统)环境变量的配置:Path: %JAVA_HOME%\bin; JAVA_HOME:jdk安装目录

6、开发工具:Eclipse \ IntelliJ IDE \ NetBeans

7、进行不产生舍入误差的数字(精确的运算)计算使用 BigDecimal/BigInteger

8、封装:高内聚(封装细节)、低耦合(简化外部调用)

9、JAVABean规则:提供了属性和相应的Get/Set方法,没有其他一些复杂的方法的简单的类

10、多态:继承、重写、父类引用指向子类对象,多种实现

11、抽象方法和抽象类 abstract告诉子类必须要给抽象方法提供具体的实现,通过抽象类,我们可以严格限定子类的设计,使子类之间更加通用

        抽象方法无具体实现

        抽象方法必须被子类实现

        抽象类不能实例化,不能使用new

        抽象类可以包含属性、方法、构造方法,但是构造方法不能用new来实例,只能用来被子类调用

        抽象类只能用来被继承

        抽象类可以包含普通方法,有具体实现

12、接口/实现类

        只能定义不变的

        不提供任何具体方法interface

        全是抽象方法,不需要abstract修饰

        规范和具体实现的分离

        契约/规范

        接口可以多继承 extends

        访问修饰符只能是public或者默认

        接口中的属性只能是常量,修饰符可以不用写

        子类通过implements来实现接口中的规范

        不能创建实例,但是可以用于声明引用变量类型 IPerson person=new Student();

        实现类可以实现多个接口

13、面相接口编程

        降低了模块间的耦合性,提高整个系统的可扩展性和可维护性

        在没有写实现是要设计好接口,所以设计比较难

14、内部类

        成员内部类

        静态内部类 static

        任意修饰符

        静态成员

        非静态内部类

特点

        可以直接访问外部类的成员

        必须寄存在一个外部类的对象里 Outer.Inner inner=new Outer().new Inner();

        生成类文件:Outer$Inner.class

        Outer.this.age

        this.age

        不能有静态方法 静态属性 静态初始化块

        外部类的静态方法 静态代码块不能访问非静态内部类

匿名内部类

        适用于只是用一次的类

        new class(){}

        无构造方法

15、字符串String和常量池

        字符串常量池

        先去常量池查找

        new 创建新的对象

        通常比较字符串使用 equals

        Class文件常量池

        运行时常量池

16、阅读API文档

        String 类:

        数组的拷贝arraycopy(object src,int srcpos,object dest,int destpos,int length)

        数组的插入和删除都是拷贝

17、Arrays工具类

        ToString

        Sort排序

        binarySearch二分查找

18、二分法检索

        有序数组

        折半查找 low mid high

19、包装类 :位于java.lang包

        使用包装类会在堆内存生成 对象

        基本数据类型和包装类对象互相转换

        var a=new Integer(30);

        var b=Integer.valueOf(30);

        int c=b.intValue();

        double d=b.doubleValue();

        int x=new Integer("888");字符串包装成Integer对象

        var z=x.toString();

        Integer.MAX_VALUE

        针对8种基本数据类型

        byte Byte

        boolean Boolean

        short Short

        char Character

        int Integer

        long Long

        float Float

        double Double

20、包装类 自动装箱和拆箱(编译器帮我们处理)

        装箱:基本数据类型--自动转为--》对象 XXX.valueOf(值);

        拆箱:对象--自动转为--》基本数据类型 XXX.intValue();等

        包装类缓存的问题:-128~127直接从范围内取值,是同一个对象,不在范围内的==为false,equals为true

21、String 源码分析:

        不可变对象(不可变字符序列)

        进行String类型的比较时一定要使用 equals方法比较(比较值)

22、可变字符序列

        链式调用

        StringBuilder(一般使用StringBuilder)

        线程不安全,效率高

        StringBuffer

        线程安全,效率低

        Runtime.getRuntime().freeMemory();//获取系统剩余内存空间

23、时间处理相关类

        位于java.util包

        时间:Date

        long now=System.currentTimeMillis();获取系统当前时刻毫秒数 long类型

        Date d=new Date();//默认当前系统时刻

        new Date(2000);//2000时刻

        d.getTime()获取毫秒数

        格式转换:DateFormat

        一般使用实现类SimpleDateFormat

1、时间对象和字符串之间的转换

        把时间对象 --》 按照“格式字符串指定的格式”转为相应的 --》字符串

        DateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//定义格式

        string str=f.format(new Date(毫秒数));//按照上述定义的格式返回字符串

2、把字符串 --》 按照“格式字符串指定的格式”转为相应的 --》 时间对象

        DateFormat f2=new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");

        Date date=df.parse(“2019年10月12日 12时12分12秒”);//throw ParseException

        日期类:Calendar

        一般使用实现类GergorianCalendar

        提供日期计算相关功能:年月日时分秒的展示和计算

        注意:月份从0开始到11代表1月到12月、星期用1-7表示,1表示星期日,2表示星期一

        Calendar c=new GergorianCalendar(年,月,日,时,分,秒);

        //Calendar c=new GergorianCalendar(2019,07,03,22,33,55);

        如果不传参数,默认是今天的日期时间new GergorianCalendar();

        int year=c.get(Calendar.YEAR);//获取年份,其他类似

        获取日期:分别获取年月日时分秒

你可能感兴趣的:(Java笔记01)