java基础(总结Head First Java一书)

java程序代码运行过程:

            源代码.java——》编译器——》输出.class字节码文件——》java虚拟机读取与执行

类与对象

           类是创建对象的模型,所有的java程序都定义在类中

           对象包括变量和方法

                                   变量有两种:主数据类型和引用(遥控器)

                                   方法:可以传实参,传入后变为形参,可以在方法内运用但方法无法改变调用方所传入的参数(java是通过值传递的,即拷贝)

面向对象

          封装  :将实例变量私有化,并提供公开的getter和setter来控制存取动作

             实例变量:声明在类中            永远都会有默认值

             局部变量:声明在方法中           没有默认值(所以使用之前必须要初始化,否则无法编译)

             变量的比较:==比较两个主数据类型或者两个引用是否引用同一个对象;equals判断两个对象是否在意义上相等

          多态 (继承的基础上) :            

                           Animal mydog  = new Dog();  对象多态,参数和返回类型也可以多态

                          方法的重写(覆盖),方法的覆盖

        接口是多态和Java的重点(类似100%纯天然抽象类)

       先叙述下抽象类为什么出现:当有些类不应该被初始化(不让这个类被new出来),通过标记为抽象类

          eg:Animal   a   =    new   Animal()         错误,没有animal这个动物

          抽象类:abstract    class     Animals{              }             必须要被继承过

          抽象方法:public    abstract   void     eat();             必须要被覆盖过        只能在抽象类中

      接口出现:java不允许多继承,会有致命方块问题(若一个类同时继承两个父类,到底实现谁的方法)用接口解决多重继承                           

                                public  class  Dog  extends   Animal   implements   Pet{                    }                                     (宠物)

内存   (程序运行空间)

     当java虚拟机启动时,他会从底层的操作系统取得一块内存,并以此区段来执行Java程序

     栈:方法调用和局部变量

     堆:所有的对象(包括实例变量)

修饰符 static与final

    静态变量是共享的(每个类一个),类加载时初始化

    静态方法直接用类名称调用,不能存取非静态的方法

    静态的final变量是常数

    final的变量代表不能改变它的值;final的方法代表不能覆盖掉改method;final的类代表不能被继承

对象序列化与解序列化(即存储与读取对象的状态)

      用相关流以及连接流写与读,涉及到的流:FileOutputStream,ObjectOutputStream(中间件过渡作用)

——》文本数据的写入与读取类似,涉及到的流:FileWriter(省去了中间件),BufferedWriter(增加缓存功能,提高效率)

      Buffered     缓存区,可以暂存一堆数据,满时再实际写入磁盘,如果强制缓冲区立即写入,调用writer.flush()

——》网络socket连接与文本数据的读写类似,涉及到的流:BufferedReader,printWriter

       网络联机     从服务器读取server—socket输入流—》InputStreamReader——》BufferedReader——》client

                          向服务器上写client——》printWriter——》socket输出——》server

                  流的功能:socket(从socket取得低层串流)——》InputStreamReader——》BufferedReader(高层串流)

                  printWriter相当于后两者合并,转换字节为字符

网络联机后的多线程  eg:发送聊天信息的同时也能收到信息(及时)

         Thread是java.lang.Thread这个类,它的对象是用来表示一个线程

         ——》同时Thread需要一个任务,即实现过Runnable的实例(Runnable接口只有一个方法run())

         ——》要把runnable传给Thread的构造函数才能启动新的线程

 调度器将线程关进去一段时间的情况:线程本身要求sleep();线程调用某个被锁住的对象的方法(clocked);线程执行到等 待socket输入串流的程序段,但没有数据可供读取

并发性问题:

     两个或以上的线程存取单一对象的数据(取钱)

     解决方法:synchronized关键词代表线程需要一把钥匙来存取被同步化的线程,要保护数据,就把作用在数据上的方法给同步化

数组与集合

      数组也是对象(可以被声明来承载主数据类型或对象引用(遥控器))

       在int类型的数组中,每个元素可以装载一个int;而引用类型的数组中,只会保存引用而不是对象本身,,,一旦数组被声明出来,你就只能装入所声明类型的元素

      缺点:数组无法改变大小,无法删除元素,无法调用方法等,最多只能存取他的length实例变量

 引出集合ArrayList               扩大了数组的功能,也是一个对象,只有在运用主数据类型时数组比集合快

                                            ArrayList只能携带对象而不能带主数据类型,但编译器可以自动将主数据类型包装成object以存放在ArrayList中

       List:对付顺序的好帮手     ArrayList  LinkedList

       Set:注重独一无二的性质       TreeSet(以有序状态保持并可防止重复):

                                                        HashSet(防止重复的集合,可快速找寻相符的元素):通过hashCode()与equals()检查重复

 

 

       Map:用key来搜索的专家        HashMap(可用成对的name/value来保存和取出)

                                                         LinkedHashMap(类似HashMap,但可记住元素插入顺序,也可设定成按照元素上次存取的先后来排序)

   

 

 

 

       

 

 

      

 

   

     

      

           

 

转载于:https://www.cnblogs.com/l-man/p/8599074.html

你可能感兴趣的:(java基础(总结Head First Java一书))