正经人z
菜鸟一个!

1.方法就是函数,方法不能嵌套定义;要定义在类当中;
2.当返回值为void时,可以在方法结尾直接写return;也
   可不写,系统默认填上return.
3.方法重载的定义:在同一个类中的多个方法,他们的方法名相同
   参数列表不同,称为方法重载。方法重载与返回值类型无关。

   4.数组的初始化有动态初始化和静态初始化。
   动态初始化:只指定长度,有系统给出默认值。
   静态初始化:给出初始化值,又系统决定数组长度。

   5.用 int[]arr=new int{}创建数组,然后再 int[]arr2=arr;
   这时两个数组名引用一个内存;

   6.数组使用常见问题:
       1)数组索引越界异常:ArrayIndexOutOfBoundsException
        也就是访问了不存在的索引。
       2)空指针异常:NullPointException方法
        数组名存的是null,而不是数组的地址

   7.数组属于引用类型,引用类型的变量作为参数传递给方法时,
     传递的是地址值;基本类型的变量作为参数传递给方法时传的是值;

   8.成员变量:类中,方法体外;局部变量:方法的参数列表或者方法体语句。
     Java中使用变量遵循“就近原则”,如果局部位置没有,就去成员位置找,
     还没有系统就报错;(但是在继承中,子类可以去父类中找)

   9.自定义类属于引用类型,在作为方法形参时传递的是地址值。

   10.成员变量与局部变量的五大区别。

   11.public一般用于修饰方法;private一般修饰成员变量;
      被public修饰,能被所有类调用;
      被private修饰,只能在本类中使用;

   12.this关键字:表示本类对象的引用,本质是一个对象。
      特点:每个普通方法都有一个this,谁调用该方法,this就指向谁。
      用法:this.属性名或this.方法名(参数);

   13.this可用于成员变量和局部变量重名的情况。

   14.构造方法的作用是初始化对象。构造方法没有返回值类型,
   连void也不能写。只能 修饰符 方法名(参数){};

   15.当你不写无参构造方法时,系统默认加上它;

   16.arr sc=new arr();如果括号内啥都不写,则调用的是无参构造函数;
     如果写了,则调用有参构造函数。

   17.标准的Javabean类写法:
      1)方法都是公共的
      2)成员变量用private
      3)有setxxx和getxxx方法;
      4)有全参和无参构造方法;

   18.子类只能继承父类的非私有成员(成员变量,成员方法);

   19.Java中使用变量的规则:就近原则
         1)先找局部变量
         2)没有,再找本类中的成员变量
         3)没有,再去父类中的成员变量找,
         4)还没有,就报错。

   20.当面对父类中的成员变量和子类的成员变量和局部变量相同时,
      区分他们可以使用super和this;
      super代表父类中的成员变量;
      this代表子类中的成员变量;

   21.继承中重名的方法:
       1)父类功能不满足现状,需改进,用super.方法名调用父类
          方法,再改进
       2)父类方法已过时,重新定义,叫方法覆盖;

   22.子父类的构造方法:
       1)子类所有的构造方法的第一行都有一个默认的super()用
          来访问父类的无参构造方法;
       2)如果父类没有无参构造方法,可以通过super(参数)的形
          式来访问父类的带参构造方法

   23.四大权限修饰符的修饰范围从小到大为:
     private->默认(啥都不写)->protected->public
     注意:子类的修饰符范围不能小于父类。

   24.private:强调的是给自己使用
      默认:强调的是给同包下的使用
      protected:强调的是给子类使用
      public:强调的是给大家使用

   25.Java中实现多态的三大步骤:
       1)要有继承(或者实现)关系
       2)要有方法重写
       3)要有父类引用指向子类对象;

   26.多态中调用成员方法是编译看左(左边类型有没有这个成员)
      运行看右(运行时看的是右边的成员);

   27.多态的使用场景:父类型可以作为形参的数据类型,这样
      可以接收任意的子类对象。

   26.多态中成员变量不涉及重写。
      再多态中使用成员变量遵循“编译看左,运行看左”;
      Animal an=new Dog();

   27.多态的弊端:父类引用不能使用子类的特有成员。
      解决办法:类型转换
      注意:1)只能在继承层次上进行转换,否则报ClassCastException异常
            2)将父类对象转化成子类之前,使用instanceof关键字检查
            
   28.instanceof关键字的用法:对象名 instanceof 数据类型
      意思是判断前边的对象是否是后边的数据类型;

   29.抽象方法只能定义在抽象类中,抽象类中可以没有抽象方法;

   30.抽象类的子类:
      1)普通子类:必须全部继承父类的方法
      2)抽象子类:不需要继承;

   31.抽象类中的成员比普通类多一种:抽象方法,其他的和普通类一样;

   32.在实际开发中,子类一般有两个构造方法:
      子类的无参构造方法访问父类的无参构造方法
       子类的全参构造方法访问父类的全参构造方法;

   33.final关键字:
      1)修饰类,不能有子类,但能继承其他的类;
      2)修饰方法:则该方法不能被重写;
      3)修饰成员变量:如果修饰基本类型的变量,值不变;
         如果修饰引用类型的变量,地址值
         不变,属性值可以边(了解);

   34.static关键字:能被本类所有对象共享;
      任意对象能对其值进行改变,不安全,所以用final修饰
      public final static String name="mmm";(公共的静态常量)

   35.静态成员属于类;

   36.static关键字修饰成员方法:变为静态方法,静态方法中没有对象this,
      所以不能访问非静态成员。
      引用:类名.成员对象
            类名.成员方法(参数)

   37.接口是一个比抽象类更抽象的类,所以不能直接实例化,要子类创建对象;
      接口引用指向子类也是多态;(可以将接口理解为统一的标准,例如USB接口)

   38.接口中的成员方法系统默认为public abstract,不写系统就会加上;

   39.接口的定义为:interface 接口名{};与类定义相似;

   40.接口特点:
      1)接口不能实例化,要通过多态的方式实例化子类对象;
      2)接口的子类可以是抽象类(不必继承接口的方法),可以是普通类
         要继承接口的方法;

   41.对于一个类来讲,他的父类(继承的关系)中定义的都是共性内容
      他的父接口(实现的关系)中定义的是拓展内容

   43.类与类之间是继承关系(extends),只能单继承,可以多重继承
      类与接口是实现关系(implements),可以单,多实现;
      接口与接口是继承关系,可以单,多继承;

   44.接口中只有成员常量,因为所有的变量前都有默认的
      public static final

   45.接口中成员方法可以是jdk7抽象的,jdk8静态(static)和非静态(default)
      的和jdk9私有的(private);

   46.Java中三大工具:API(帮助文档),集合,IO流

   47.Java中组件的层次关系:模块(module)->包(package)
                            ->(类class或接口interface)

   48.非静态方法的调用方式:对象名. 的方式调用;
      静态方法的调用:类名. 的方式调用;

   49.java.lang包下的类可以直接使用,不需要导包;Object类是它下面的类

   50.一个类只有一个字节码文件;
      地址值的组成:全类名(包名+类名)+@+该对象的哈希码的无符号十六进制形式;

   51.Object类中的常见四大方法:
       1)int hashCord()  //返回对象的哈希码值
       2)Class getClass();//返回该调用者的字节码文件对象
       3)String toString();//返回该对象的字节码表示形式;
       4)boolean equals();//比较两对象的地址值,无意义,一般要子类重写;

   52.在实际开发中,用的最多的方法是:
      1)nextInt();接收整数;
      2)nextLine();接收字符串  按回车结束;
      3)hasNextXxx();判断作用,为boolean型;
      4)nextXxx():用于接收下一个指定类型的数据

   53.在实际开发中,String类很常用,所以优化它不在需要new;

   54.在String类中:
      1)static String valueOf();将指定的数据类型转换成字符串;
         它是静态的,所以用类名.的形式调用;


   55.API中的字段就是指成员变量;

   56.一个毫秒值对应一个时间;

   57.Data类:
       1)Data()空参构造一个对象获取当前系统时间,精确到毫秒值;
       2)Data(long)构造一个对象,获取指定时间;   

   58.Calendar类用于操作日期相关信息;
      成员方法:
         1)static Calendar getInstance();根据当前系统时区和
          语言环境获取日历对象;
         2)int get(int field);返回给定日历字段的值;
         3)void set(int field,int value);将给定的日历字段
            设置为指定的值;

   59.基本类型对应的引用类型为包装类;每种基本类型都有对应的包装类,
      注意int的包装类为Interger,char的包装类为Character;有装箱和拆箱
      的概念,jdk5以后有自动拆装箱;

   60.为啥使用包装类:可以将字符串数据转化成对应的基本类型;

   61.包装类的成员方法:static 基本类型 parseXxx(String);

   62.除了Character类无parseXxx方法外,其他包装类都有这个方法;
      因为如果String想转化成char类型,可以用TocharArray()或charAt();

   63.集合:简称集,是用来存储多个元素的容器

   64.list,set,map都是接口,必须有实现类;

   65.使用集合的步骤:
              1)创建集合对象
              2)创建元素对象
              3)将元素对象添加到集合对象中
              4)遍历集合

   66,API中的E指泛型;

   67.为什么需要增强for循环:简化书组合集合的遍历;
      增强for的格式:for(元素的数据类型 变量名:要遍历的数组或集合对象){};

   68.增强for的底层依赖的是迭代器(Iterator)
      通俗讲增强for就是迭代器的简写形式;

   69.集合有单列集合(Collection)Set,List和双列集合(Map)Map;

   70.迭代器是遍历Collection集合的通用方式,可以再对集合便利的同时
      进行删除和添加的操作,

   71.迭代器的常用方法:
          1)next():返回迭代的下一个元素
、        2)hasNext():如果任有元素,返回true
      
   72.迭代器的使用步骤:
          1)根据集合对象获取对象的迭代器对象
          2)判断迭代器中是否有元素
          3)如果有,就获取元素
             String s=(String)list.next();

   73.在使用迭代器时,可能会报并发修改异常(ConcurrentModificationException)
       也就是在遍历的同时添加或删除元素;

   74.列表迭代器则可以对集合遍历的同时添加或删除元素,但是必须通过
      调用列表迭代器(ListIterator)的方法调用

   75.泛型:泛指任意类型,常用于集合类中,他的好处在于类型安全,避免了类型转换。

   76.List<String> list=new ArrayList<String>();表示list集合只能存放string类型的数据。
      jdk7以后可以写成List<String> list=new ArrayList<>();


   77.Collections类是对集合进行操作的工具类。它里边的方法几乎为静态的,所以调用时用类名.的方式调用

   78.Set集合的特点:不可重复和无序hashset集合中用哈希算法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,
      计算次对象的哈希值,此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对
      象所在类的equals()比较两个对象是否相同,相同则不能被添加。
          总思路:hashCode不同时,则必为不同对象。hashCode相同时,根据equlas()方法判断是否为同一对象。
    在HashSet,HashMap,HashTable中都存在该问题。

   79.为什么Set集合没有“去重”?
      因为Set集合保证元素的唯一性依赖:equals()和hashCord()两个方法
      你没有在子类中重写这两个方法,默认调用的是Object类中的,Object类中的equals()方法默认
      比较的是地址值。
      解决办法:在子类中从写这两个方法

   80.Map集合是双列集合,元素由键值对构成,key可以重复,value不可以重复;
      Map<t1,t2>map=new HashMap<>();
   
   81.向map集合中添加元素用put()方法,Map集合不能直接遍历,要用KeySet()方法拿到所有键的集合,这
      样就将双列集合变成了单列集合

   82.异常(Throwable)的分类:
        1)异常(Exception):可以捕获的问题(通俗讲就是程序员产生的问题)
        2)错误(Error):不可捕获的问题。

   83.处理方式:
      1)捕获,自己处理.   try(尝试代码)...catch(执行解决办法)
         ....finally(可省,写到这儿代码一定会执行,一般用来释放资源)
        特点:程序处理完以后,继续执行
        执行流程:先执行try里边的内容,有,则到catch里边,如果
        没有,则跳到finally
      2)抛出,交给调用者处理   throws

   84.抛出异常:谁调用谁处理,main方法不想处理,可以继续抛给JVM处理
      throws Exception
      特点:异常抛出后,程序不在执行

   85.I/O流简介:(input/output),是Java中用来传输数据的方式。
      按流向分:
              1)输入流:读数据
              2)输出流:写数据

      按操作分:
              1)字节流:以字节为单位操作数据
                   1)InputStream :字节输入流的顶层抽象类
                        1)FileInputStream:普通的字节输入流
                        2)BufferedInputStream:高效的字节输入流

                   2)OutputStream:字节输出流的顶层抽象类
                        1)FileOutputStream:普通的字节输出流
                        2)BufferedOutputStream:高效的字节输出流

              2)字符流:以字符为单位操作数据
                   1)Reader:字符输入流的顶层父类
                        1)FileReader:普通的字符输入流
                        2)BufferedReader:高效的字符输入流
 
                   2)Writer:字符输出流的顶层父类
                        1)FileWriter:普通的字符输出流
                        2)BufferedWriter:高效的字符输出流
 
   86.File类是用来创建文件夹或文件的,说白了,就是处理路径
      它里边的mkdir()方法可以创建单级或多级目录(make directory)
      构造方法:
             1)File(String pathname)
             2)File(String parent,String child)
             3)File(File parent,String child)


   87.Java中路径的划分:
              1)绝对路径:以盘符开头,是固定的路径
              2)相对路径:相对于当前项目来讲的路径

   88.File类的获取功能:list():获取指定目录下文件(夹)名称数组
                        listFile():获取指定目录下文件(夹)File数组


   89.I/O流处理完后要释放资源,用close()方法关闭

   90.IO流拷贝文件:
          1:创建字符流输入对象,关联数据源文件,
          2:创建字符流输出对象,关联目的地文件
          3:定义变量,接收读取的内容
          4:循环读取
          5:释放资源
          6:如果目的地文件不存在,系统自动生成;

   91.字符流拷贝文件的标准代码:
          1)BufferedReader br=new BufferedReader(new FileReader("路径"))
          2)BufferedWriter br=new BufferedWriter(new FileWriter("路径"))

   92.在缓冲输入输出流类中,ReadLine()为读取一行字符,如果没值了,换回null
            NewLine()为Java提供的在任何平台使用的换行方法

   93.字符流只能应用于纯文本文件,拷贝其他(音频,视频,图片等)用字节流

   94.字节缓冲流的特点:即使你没有定义字符数组,它在下边也会以字符数组的形式来执行,也称为高效缓冲字节流
      用法同上

   95.反射:在Java中,反射指的是在程序运行期间根据类的字节码文件对象
         来获取类中成员并使用的一项技术
     什么是反射:在程序运行时分析类的一种能力
   普通的程序先在后缀名以.java结尾的源文件中编写程序,然后编译成后缀名以.class结尾的字节码文件中,此时,就可以
     通过对象名.的形式调用方法反射就是反过来

   96.类加载器(ClassLoader):负责将类的字节码文件(.class文件)加载到内存中,并生成相应的Class文件
      当你第一次使用类中的成员时,类加载器将此类的字节码文件加载到内存中,且只加载一次,如果在使用此
      类成员,将不再加载
   
   97.一个源文件(.java)对应一个字节码文件(.class)

   98.获取Class对象的三种方式:
            1)Object类下的getClass()方法
            2)类的静态属性Class()
            3)Class类的静态方法Class name=Class.forName(“类的正名”)
            补充:类的正名:包名+类名

   99.构造器对象(Constractor)
      构造器类(Constractor)的常用方法有:
           1)getConstractor():获取类的构造器对象
           2)getName():获取构造器对象的所属类
           3)NewInstance():通过构造器对象生成此类的一个对象
                         
   100.通过反射的方式获取构造器并使用的步骤:
        1)先通过全类名获取该类对应的字节码文件对象,也就是Class
        2)通过Class来获取该类的构造器对象
        3)调用newInstance()方法获取该类的对象
        4)打印结果
 
   101.通过反射的方式获取成员方法并使用的步骤:
        1)先通过全类名获取该类对应的字节码文件对象,也就是Class
        2)通过Class对象来创建构造器对象,然后创建该类对象
        3)通过Class来获取该类的成员方法(Method)对象,注意Method me=clazz1.getMethod("show2",int.class);
        4)通过Method对象调用invoke()方法;

   102.通过反射的方式获取成员属性并使用的步骤:
        1)先通过全类名获取该类对应的字节码文件对象,也就是Class
        2)通过Class对象来创建构造器对象,然后创建该类对象
        3)通过Class来获取该类的成员变量对象(Field)
        4)通过Field对象的Set()方法设置成员变量的值
          注意:引用私有变量时,要调用setAccseeible()方法;

   103.什么时候用父类,什么时候用接口?
       是上下级的递推关系,针对某一块项目时用父类
       面向各类项目时,用接口

  104.Java中通过System.in和System.out对象分别和键盘与显示器产生关联而完成数据的输入和输出;
  105.Java运行工具eclipse常用快捷键:F11是切换至调试模式,F6是断点逐句调试,




posted on 2019-12-18 19:00  正经人z  阅读(226)  评论(0编辑  收藏  举报