java学习第二十九天内容

本文详细介绍了Java中的面向对象特性,包括封装、构造方法、JavaBean规范以及静态关键字的使用。此外,还探讨了继承的概念、多态的实现及其优缺点。文章进一步讲解了单例设计模式的饿汉式和懒汉式实现,以及多线程的状态、创建方式和线程安全问题。最后,简单概述了IO流的基本分类和操作。
摘要由CSDN通过智能技术生成

1.复习面向对象

        封装:将一个事物属性私有化(private),保证数据安全性,对外提供公共的访问方法(setter/getter)

        private关键字特点:被其修饰的变量或者方法只能在本类中访问,外界不能够直接访问,但是可以通过公共的访问方法来访问

        构造方法

                介绍:构造方法是方法名和类名相同的方法,不过这个方法没有返回值,也没有void

                注意:当一个类中没有构造方法,系统默认提供一个无参构造方法,如果有有参构造方法,则系统不在默认提供无参构造方法,因此建议永远给出无参构造方法

                目的:就是给成员变量进行显式初始化的

        如何输出自定义类对象的信息:直接输出自定义类的具体对象,输出值为对象的空间地址值,重写Object类的toString()方法即可得到对象信息的简易表达式

        给成员变量赋值方式:

                setter()方法

                有参构造方法

        javaBean规范

                1.这个类必须为具体类

                2.这个类必须有私有属性

                3.这个类必须有公关的setXXX()/getXXX()方法

                4.这个类必须实现Serializable接口(这个类的数据可以变为流,在网络中传输)

        static关键字

                被static修饰的变量/方法,随着类的加载一起加载

                优先于对象存在

                可以被多个对象共用,共享

                被修饰的推荐访问方式:类名.变量名/方法名();

                静态方法只能访问静态方法

        继承:将多个类的共性内容抽取出来,放在一个独立的类中,多个类和独立类产生的关系就是继承

                好处:

                        1.提高代码复用性

                        2.提高代码维护性

                        3.类和类之间的关系,是多态的前提条件

                特点:

                        只能单继承,不能多继承,但是支持多层级继承

                成员访问问题

                        成员变量:遵循就近原则,先找最近的局部位置,之后子类成员位置,最后父类成员位置,都没有就报错

                        构造方法:子类不能继承父类构造方法,但是可以通过super来访问父类的构造方法,子类所有的构造方法默认访问父类无参构造方法

                父类没有无参构造方法,子类构造方法如何访问

                        手动给出父类无参构造方法

                        让子类的构造方法都访问父类的有参构造方法

                        只要子类一个构造方法能够让父类初始化即可

                成员方法:子类继承父类,如果出现了父类一模一样的方法,方法重写,就是要子类功能,子类将父类覆盖了

        多态:一个事物体现的不同形态,在程序中为对象在内存中的变化

                前提条件

                        1.必须具有继承关系

                        2.存在方法重写

                        3.必须有父类引用指向子类对象

                成员访问特点

                        成员变量:编译看左,运行看左

                        成员方法:编译看左,运行看右

                        构造方法:存在继承关系,分层初始化,先父类初始化,然后是子类初始化

                多态的好处

                        1.提高了代码复用性

                        2.提高了代码扩展性

                多态弊端

                        不能访问子类特有功能

                如何访问子类特有功能:向下转型

2.设计模式之单例设计模式

        单例模式:内存中始终只有一个类对象存在

        实现方式

                饿汉式:永远不会出现问题的单例模式

                        1.在类成员位置,创建一个静态实例变量

                        2.构造方法私有化,外界不能够创建对象,保证安全性

                        3.提供静态的公共访问方法,返回值就是当前类本身

                懒汉式:可能会出现安全问题的单例模式

                        1.在类的成员位置,声明当前类的静态变量

                        2.构造方法私有化,外界类不能创建对象,保证安全性

                        3.判断当前静态变量是否为空,用的时候才去创建对象

3.集合

        分类:单列集合Collection,双列集合Map

        关系:Collection集合的子接口set分为HashSet和TreeSet底层都是Map接口实现类HashMap和TreeMap实现的

        Collection集合子接口List遍历方式

                1.Object[] toArray()

                2.size()和get()方法结合

                3.Collection的迭代器Iterator iterator()

                4.List的列表迭代器ListIterator listIterator()

                5.增强for循环

for(集合数据类型 变量名:对象名称){
 使用变量名
}

        Map集合的遍历方式

               1. Set<K> keySet() + V get(K,key)

                2.Set<Map.entry<K,V>> entrySet():获取所有键值对对象

                        K getKey()

                        V getValue()

        TreeSet<E>存储自定义类型,如何实现自然排序或者比较强排序

                TreeSet底层依赖于TreeMap红黑树结构(类似二叉树)

                要实现自然排序,存储类型的类必须实现compareable接口,重写compareTo()方法,按照三元运算操作,进行排序规则,并且TreeSet使用无参构造方法

                 要实现比较器排序:使用有参构造方法TreeSet<E>(Comparator<E> com)

TreeSet<Student>  ts = new TreeSet<E>(new Comparator<Student>(){
    public int compare(student s1,student s2){
        int num = s1.getAge()-s2.getAge();
        int num2 = (num==0)?(s1.getName().compareTo(s2.getName())):num;
        retuen num2;
    }
})

 4.多线程

        线程一个有几种状态

                6种

                新建,运行,阻塞,死死等待,超时等待,死亡

        创建线程的方式

                继承实现:

                        自定义一个类,继承Thread类

                        在main方法中,创建自定义类对象

                        启动线程,start()

                接口实现:使用到了静态代理,静态代理最大特点就是代理角色和真实角色必须实现同一个接口

                        自定义一个类,实现Runnable接口,这个类为资源共享类

                        创建资源共享类对象

                        创建Thread类对象,将资源共享类对象作为参数传递进去

                        启动线程

                线程池:ExecutorService 接口,具体子实现类

                        工厂类

                                Executors的静态功能

                                        public static ExecutorService newFixedThreadPool(int nThread):创建一个具有固定数量线程的线程池

                                ExecutorService:

                                        Future<V> submit(Callable<V> call):提交异步任务

                                                Future:线程异步计算的结果

                                                        自定义类实现callable方法,重写call方法,进行计算

                                       void shutdown():关闭线程池  

                检验多线程安全问题的标准

                        1.查看是否有多线程环境

                        2.是否存在共享数据

                        3.是否有多条语句对共享数据进行操作

                解决多线程安全问题的方式

                        1.使用同步代码块将对数据进行操作的语句包裹起来,解决安全问题

                        2.使用Lock锁对象ReentrantLock

                                lock():获取锁

                                unlock():释放锁

5.IO流

        按照类型及流方向划分

                字节输入流:执行读操作

                        InputStream

                                FileInputStream:文件字节输入流

                                BufferedInputStream:字节缓冲输入流

                字节输出流:执行写操作

                        OutputStream

                                 FileInOutputStream:文件字节输出流

                                BufferedOutputStream:字节缓冲输出流

                字符输入流:执行读操作

                        Reader

                                InputStreamReader:字符转换输入流

                                        FileReader(String path):符转换输入流便捷类

                字符输出流:执行写操作

                        Writer

                                InputStreamWriter:字符转换输出流

                                        FileWriter(String path):字符转换输出流便捷类

                        

                

                                

                

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值