面向对象

1.一个java文件允许有多个class类,如果有public class只能有一个,类名与文件名必须相同.this和super只能用于非静态方法之中。
    方法的重载区别于方法中参数的个数和类型,顺序,而不是返回值。
    方法的覆写就是照搬上一级的方法,进行实现。(实现抽象方法和改变原有方法的功能);子类不能定义一个只与父类方法返回值不同的方法,因为这不是覆写,就是重新定义了一个,那么怎么调用呢
    子类继承父类,覆写了父类方法。向上转型了,调用的方法如果是子类所覆写的方法,那么是调用子类的方法,仅此而已。覆写的属性就不是这样了。
    流中口诀:读入写出。

    54.输入流与输出流都是以java程序为中心,java程序向外输出数据称为输出流,外面的数据输入到java程序中称为输入流。
    import 导入的是类,而不是包。new关键字后跟的方法是构造方法。
    readLine()用于输入流中读取文本内容。
    一个Graphics对象相当于一支笔一样。
    接口的访问权限都是public,常量定义为public static final ****,方法为public abstract ****,开发中可以省略
    抽象类方法的定义不能省略abstract,接口中的抽象方法的定义可以省略,因为抽象类的方法不全部是抽象方法。
    一个没有完全实现接口的抽象类,抽象方法应当写出来,让别人知道你是个真正的抽象类。
     抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,HttpServlet定义为抽象类,只是不想被实例化,让它被继承。理论上它可以不定义为抽象类,没有抽象方法。
    Class.forName()可以加载一个类,比如同一个工程下的类和其他包中的类.
    java虚拟机会自动加载主类,就是有main()方法的类。
    局部变量在方法结束会销毁。
    一个接口不能继承类,但是一个接口可以继承多个接口
    如果一个类的构造方法较多时,在构造方法中可以用this调用其他构造方法,语法为this(参数)但是有两点:1.this语句放在方法之首2.类中的构造方法至少有一个不是用this调用的
    private 该类能访问,默认情况,该类和该包其他类,protected,该类,该包其他类,其他包的该类的子类;public,
    子类实例化的时候永远要先去父类的构造方法,默认是无参构造方法,父类构造方法放在子类构造方法首行。

    程序想要使用某个类,首先加载该类,创建一个java.lang.Class对象,然后初始化static,再来用构造方法实例化一个对象。

    在java中,字符串常量被作为string类的一个对象来处理,而不是一个数据。字符型常量用‘’,字符串常量用“”。

   String str1="hello";String str2="hello";String str3="hello",表示三个string对象都是指向同一个堆内存空间,值为hello,节省内存
   String str2=new String("hello");因为一个字符串就是String的匿名对象,所以先在堆内存开辟了一个内容为hello的内存空间,然后用了new又在堆内存开辟了一个内容为hello的内存空间,
   所以之前开辟的那个空间就等着垃圾处理

   出现了异常,如果没有进行异常处理,程序运行的时候,将把异常打出来,之后的代码将不会执行,如果进行了异常处理,将执行catch语句内容,还要执行之后的代码.捕获更粗的异常要放在更细的异常之后

   static修饰的属性为全局属性,是属于类的,所有对象共享的,即一个对象改变了全局属性的内容,则其他的对象也会跟着改变,所以会用类名.属性来调用

    finally的独特作用,某段语句出现异常,如果不进行catch的异常处理,那么下面的语句就不会执行,
    但是想要执行下面的语句又不进行catch的异常处理,可以用try{}finally{}格式。

   任何一个类都是静态成员先执行,就是static成员变量与static{}块,它们的执行顺序跟它们在类书写顺序有关,
   static成员变量没有赋值,系统会默认赋值,static{}块只在第一次执行,就一次。————————————称为类初始化
   普通类则是,然后是普通成员变量赋值,没有赋值,系统会默认赋值,构造块=初始化块{}也会执行,再是构造方法。——————————————称为对象的初始化
   有主方法的类则是普通类之前执行main()方法。

   

 

 


2.整数的默认类型是int,小数的默认类型是double,对象默认类型是null。
4.所有数据类型都会向字符串转换。
97.如果继承,则先是父类的类的加载,再是子类的加载,然后是父类对象的初始化,最后是子类对象的初始化。
    记住在一个java进程中,任何一个类都只会被加载一次和初始化一次。
21.System.exit(x),x为非0数表示程序退出。
22.构造块优于构造方法,静态块优于主方法执行,如果普通类中定义的静态快,优于构造快执行,不管有多少个实例化对象产生,静态代码只执行一次,静态代码块的主要功能就是为静态属性初始化。
38.匿名内部类的语法格式为new 类别或接口(){}.相当于一个表达式。
39.匿名内部类可以这么理解:比如,抽象类和接口都分别需要子类的继承和实现。当我们需要使用抽象类或接口中的内容时,就要实例化子类吧,
   而匿名内部类就是省略了这个子类,直接实现抽象类或接口中的方法。
40.add***Listener(***Listener l)方法中l表示为实现***Listener接口的子类对象,根据子类实现接口中的对象的多态性可知。
41.如果一个方法用了throws关键字,表示该方法可能会出现异常,异常交给调用该方法的地方处理,所以在调用的时候,应该用try...catch语句进行处理。如果主方法也用了throws关键字,那么调用
   这个方法时,可以不用try...catch语句进行处理。这时我们知道java最大的头JVM调用主方法,所以异常交给JVM处理了。程序出现异常,默认方式就是JVM处理的。
42.throw语句用于抛出一个异常的实例化对象,如:catch(***Exception e){throw e},又如catch(Exception e){throw new ***Exception()}
48.线程的分类:用户线程和守护线程,区别可以这么理解,java虚拟机判断程序执行结束,是看用户线程是否结束,如果用户线程结束了,java虚拟机就会离开,那么守护线程不管执行完没完都得离开,
   因为虚拟机都离开了,线程还怎么执行。thread.setDaemon(true)可以把一个用户线程变成守护线程。
49.在线程中,main方法相当于主线程,如果主线程中有子线程,子线程创建前的代码按顺序执行,之后的代码都相当于main根下同一级程序,JVM调度线程的执行顺序是随机的。
55.编码是以软件或程序存在的,不同的软件可以有不同编码,程序有可以定义为不同的编码。
56.如char i='a',用ASC码的单字节二进制转换成十进制表示为97,所以可以表示为char i=97,
   用Unicode编码的双字节的二进制转换成十六进制表示为 char i='\u0061'
57.java 采用的是Unicode编码,所以论单个字符所占内存,英文字符同样占两个字节,只是有个字节为空字节
   论一段字符所占的内存大小,则根据字符实际所占内存大小计算,即英文字符占一个字节,中文及其他语言占两个字节。
   如:String str="中guo"占五个字节。中文的Unicode编码范围\u4E00-\u9FBF
60.JFrame表示的是窗架,panel表示的是面板,pane表示的窗格,可以这么理解,面板是在窗架上加了一层,窗格是在窗架挖了一个洞。
62.转义字符其实就是键盘中该字符另一种表示形式,如:a  则用a表示,\  它则用\\表示。
66.编码可以这么理解:计算机中数据都是以二进制(即0和1)表示的,用不同的编码去看待同一个数据(即在内存中0和1组成的字符串),就会翻译不同的文字符号。
72.native关键字表示的是一个由java调用本机操作系统函数的关键字,在java中,运行java程序调用本机的操作系统的函数以完成特定的功能。
78.匿名内部类也就是没有名字的内部类

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
匿名内部类其实就是两步变一步的表达式,已经实例化好了对象的子类,语法格式为new 父类构造器(参数列表)|接口();
想想,既然可以实例化,那么子类肯定不是抽象类,就是它要实现抽象类所有抽象方法和接口所有抽象方法,子类自己也不能
定义抽象方法,已经实例化好了对象,不需要构造方法了。如果自己定义了方法也没用的,它的作用就是进行方法的覆写和实现全部抽象方法。
79.成员内部类,静态内部类定义在外部类的方法之外的。局部内部类定义在方法中的,匿名内部类相当于一个表达式。
   成员内部类,静态内部类相当于外部类的一员一样,成员内部类只能声明非静态属性或方法,能访问外部类的所有的,包括静态的,非静态的。
   静态内部类中属性和方法默认情况下都是静态的,只能访问外部类的静态的
   局部内部类中只能定义非静态属性和方法。
80.在没有内部类情况下:成员变量与局部变量在方法中区分可以this关键字区分,
   在有内部类情况下:外部类成员变量,成员内部类成员变量,内部类方法的变量在内部方法区分
   Outer.this.i,this.i,i;因为static修饰的变量即为类变量,所以不会在静态内部类的方法声明的,
   用Outer.i,i区分;外部类成员变量,局部内部类成员变量,局部内部类方法的变量在局部内部类方法中区分
   Outer.i,this.i,i,而要访问外部类的局部变量则必须定义为final的。
81.匿名内部类其实也是一种局部内部类。
98.字符——————编码(字符集和字符相应存储实现方式)——————二进制数据,编码可以让字符转换为二进制数据保存在计算机内,读取二进制数据时,
   要用对应的编码,否则会出现乱码。
108.类的加载和初始化一般是连续完成的,但是tomcat只是负责类的加载。

109.删除重复的记录:http://www.cnblogs.com/sunxiaonan/archive/2009/11/24/1609439.html

110.http://www.linuxidc.com/Linux/2011-11/46470.htm

111.http://blog.itpub.net/8816263/viewspace-1006864/

对于Java中异常处理,有被动的处理,就是该方法已经申明有异常,那么你就要捕获,一,要么在该处捕获,要么用throws关键字申明,让调用者处理。

                            还有主动处理,就是你可能认为该处存在异常,就主动捕获,然后进行相应的处理

          而throw 表示抛出一个异常,是对捕获到的异常的一种处理方式。

 

 

112.内部类被实例化:

package com.tools;

public class GH {
    
    static class ab{
        public  void a(){
            System.out.println("123");
        }
    }
       
    
    
     class abc{
            public  void a(){
                System.out.println("456");
            }
        }
       
    
    
    
    public void aa(){
        class ab{
            public void b(){
                System.out.println("789");
            }
        }
        ab v=new ab();
        GH.ab vv=new GH.ab();
        GH.abc vvv=this.new abc();
    }
    
}
113.内部类:http://www.cnblogs.com/nliao/p/3308690.html

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


  

 

posted on 2019-05-25 11:56  芝麻开花——节节高  阅读(117)  评论(0编辑  收藏  举报

导航