您的位置:首页 > 编程语言 > Java开发

Java学习之总结

2019-01-11 19:49 85 查看

 一.访问控制符:

    1. 4种:public,private,protected,默认。如果不加修饰,默认为default。

    2.无论是私有的属性还是私有的方法对于外部都不能访问,而在类内,无论是私有的方法,还是公开的方法,还是保护型的方法,都可以访问私有,公开,保护型的属性,为什么,人家是一家人嘛,都是在类内。也就是说,在类的内部,无所谓控制符的问题。访问控制符是针对外部而言.

________________________________________________

二.构造函数:

    1.所谓构造函数,就是在创建一个类对象的时候自动调用的一个函数,没有创建类对象,就不会调用。

    2.当我们没有写任何构造函数时,它就会在创建一个类对象的时候自动生成一个构造函数,但是如果我们已经写了一个构造函数,他就不会自动生成了。

    3.如果是局部变量,一定要初始化,不然会报错;但是如果是int型的一个属性,没有初始化,输出时默认为0,如果是boolean型,没有初始化,输出时默认为false。也就是说,当一个对象被创建时,如果没有对他的成员变量进行初始化,那么会对它的各种类型的成员变量自动进行初始化;而局部变量,编译器是不会自动进行初始化的。

________________________________________________

三.this指针:

    1.当前时刻,哪个对象调用该函数,那么this就指向当前调用该函数的对象。假如调用的是show函数,那么this就指向当前正在调用show函数的对象。

    2.如果当前时刻正在创建对象,那么this代表正在创建的对象。

________________________________________________

四.static

    1.static所定义的属性是属于类本身,它被类的所有对象所共有。

    2.static属性和方法虽然属于类本身,即可以通过类名的方式访问,但是static属性和方法也很明显属于类对象,当然也可以通过类对象名的方式访问。

    3.只有非private的static成员才可以通过类名的方式访问。

    4.非静态方法可以访问静态成员,静态方法不可以访问静态成员。

___________________________________________________

五.复习

    1.静态的一定是属于类本身,它可以通过类名和类对象名的方式访问,但是只有非私有的静态成员才可以通过类名访问。比如静态成员i,所在类为A,可以直接通过A.i的方式访问。

    2.静态的意味着属于所有对象,只要一个对象改变其值,所有对象的也就改变了。

    3.静态非静态都可以访问静态,但是静态不能访问非静态。

    4.static只能修饰普通方法,不能修饰构造方法。

    5.一个类的属性可以是个类对象。

    6.如果构造方法是private的,那么使用new构造对象就会报错。

    7.类中的静态方法只能访问静态成员,而非静态方法可以访问所有成员,包括静态成员。

_____________________________________________________

六.继承

    1.私有属性不能被继承。属性包括数据成员和方法。(注:永远也不可能继承父类的构造函数,可以通过super()

来访问父类的构造函数。)

    2.子类内部成员可以访问父类非私有的成员,私有成员无法被子类方法所访问。

    3.通过子类对象名只能访问从父类继承过来的非私有成员。总结起来就是私有不能被继承。其实私有物理上已经

被继承过来(已经占用了内存),只不过逻辑上程序员不能去访问他。因此继承必须慎重,否则会浪费内存。

    4.java中的继承反应的是一般到特殊的关系。

    5.java只支持单继承,就是一个类只能有一个父类。

    6.普通方法中不能用super调用父类中的构造方法。

    7.每个子类的构造方法的第一条语句,都是隐含的调用super(),如果父类没有构造函数,编译就会报错。另外,

如果显示的写出了super()语句,则必须是在第一条语句,否则会报错。调用父类的构造函数必须借助于super

,不能直接写父类的类名。最后,一个构造函数中不能写多个super(参数列表)语句。

    8.super.f()这样的语句可以用于调用父类的方法。(非构造方法)。

    9.重写方法必须和被重写方法具有相同的方法名称,参数列表,和返回值类型;子类中不允许出现和父类同名同

参但是不同返回类型的方法,否则编译会报错;重写方法时,不能够使用比父类中方法更高的权限。

______________________________________________________

七.多态

    1.子类可以当作父类看待,而父类不可以当作子类看待,就像狗可以当作动物看待,但是动物不能当作狗看待。

(子类对象可以直接赋值给父类引用,但是父类对象在任何情况下都不能赋值给子类引用。)通过

    2.同样的代码做不同的事情就是多态。(粗糙理解)。

    3.通过父类引用只能访问子类对象从父类继承过来的成员,不能够访问子类对象所特有的成员。

    4.只有在父类引用本身指向的是子类对象时,才可以把父类引用强制转化为子类引用。

_______________________________________________________

八.抽象类

    1.抽象类通常用来作为一个类族的最顶层的父类,用最底层的类表示现实中的具体事物,用最顶层的类表示该类

族所有事物的共性。 

    2.抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。

    3.可以定义一个抽象类的引用,但是不可以定义一个抽线类的对象。比如可以定义:A aa。不可以定义:A aa=

new A()。

    4.Final:既可以加在public前面,也可以后面,表示当前类不能再被继承;当final修饰某属性的时候表示这个属

性必须被赋值且只能被赋一次值;当final修饰类中的一个方法表示他可以被子类继承,不能被子类重写。

____________________________________________________________

九.接口

    1.定义:就是抽象方法和常量值的集合,从本质上讲,接口是一种特殊的抽象类。

    2.接口中定义的属性必须是public static final的,    而接口中定义的方法必须是public abstract的。

    3.一个类可以实现某个接口,但是不能继承某个接口。而接口可以继承接口,并且接口可以继承多个接口。

    4.接口中定义的属性的值在类中不能被更改,因为接口中的属性的值是final型的,只允许被赋值一次。

    5.如果一个类只实现接口的部分方法,那么这个类必须定义为抽象类。

    6.一个类可以在继承一个父类的同时实现一个或多个接口但是extends关键字必须在implements之前。

    7.属性如果没有赋值默认为0,但是如果局部变量没有赋值就是垃圾值。

    8.当一个类实现一个接口的时候其对象可以调用从接口过来的方法,不能调用类所特有的方法。

    9.不可以new接口对象,但可以定义一个接口引用类型的变量并将其指向实现接口的对象,达到多态的目的。

    10.一个类要想实现某接口中的方法,必须得在其方法返回值前面加上public,因为在接口中方法的默认属性为

public abstract。

__________________________________________________

Java 面向对象总结

封装
     访问控制符
         只有private不能在外部访问
         类内部访问控制符是透明的

     构造方法
         定义:名字和类名一样,无返回值

     注意事项:一个类只能调用一个构造方法,一个类至少有一个构造方法,如果自己定义了构造方法,编译器
将不会再提供默认的构造函数

this

static

继承
     Java允许单继承
     私有成员无法被继承
     重写:
          方法名和返回类型,参数值必须一样,访问权限不能过低

多态

_____________________________________________________

十.同包不同包之间的访问

    1.只要是非私有成员都可以被同包的另一类访问。

    2.在不同包中没有任何关系的两个类,只有public类的public成员才可以被另一个类访问。

    3.在不同包中有继承关系的两个类,只有public类的public成员和public类的publicprotected成员能够被另一个

包的子类在类内部访问,但是在子类的外部,通过子类对象名只能访问父类的public成员。

______________________________________________________

十一.异常

    1.为什么需要异常?因为有的情况下,if,else语句没办法处理异常。

    2.异常是程序运行中发生的事件。

    3.当Java程序运行出现问题的时候,系统会自动检测到该错误,并立即生成一个与该错误对应的的异常对象。然
后把该对象提交给Java虚拟机,Java虚拟机会自动寻找处理这个异常的代码,如果没有找到,则由Java虚拟机做
一些简单的处理后,程序被强行终止。

    4.Scanner sa = new Scanner(System.in);
   i=sa.nextInt();
   上面语句可以从键盘得到数字字符。

    5.              try
        {
            new B().f();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
上语句可以把出错的堆栈路径打印到屏幕上面。

    6.不是所有的异常都必须处理,如果是属于Exception类的子类的异常,那就是必须处理的异常,但是如果是属于
RuntimeException的子类的异常,那就可处理可不必处理。

    7.处理异常有两种方式:1  直接用try  catch(catch和catch之间不能有其他代码。)
                      2  用throws Exception将当前的异常抛给函数。

    8.try
   {
    }  这里面可以放多个可能出现异常的语句。然后后面的catch语句也可以是多个catch语句,哪个捕获到异常
就哪个去执行。而finally里的语句是无论是否捕捉到异常都必须处理的语句。都会去执行finally里面的代码。

    9.为什么要使用finally呢?给异常处理做一个统一的出口,为了在程序结束时对资源空间等做出统一整理。

    10.throw是用来抛出异常的,格式为throw new 异常名(参数)。 并且我们抛出的所有异常都必须是throwable

的子类。而throws是表示类里面有一个异常我自己不处理,所以后面跟的是一个类,不能带参数。

    11.调用了throws之后调用函数可以不处理。但是最好处理。

    12.子类覆盖基类方法的时候,子类方法抛出的异常范围不能大于父类方法抛出的异常。

_________________________________________________________

十二.toString

    1.Java中有一个object类,所有的类都会默认继承这个类,这个类里面就有一个函数叫toString()。

    2.当需要将父类对象强制转化为子类对象时:A aa = (A)b,其中假如b是B的对象。

    3.希望不同内存但是相同内容的equals返回true时,需要重写该方法。

    4.如果输出语句中,我们写的是一个对象,那么会自动调用该对象的toString()方法。

______________________________________________________________

十三.线程

    1.线程是一个程序里不同的执行路径。

    2.创建线程的第一种方法:a.创建一个继承Thread的类(假定为A),并重写Thread中的run()方法;b:构造一个A

类对象,假定对象名为aa;c:调用aa的start方法(start是从thread类中继承过来的)。 

    3.一旦调用了aa.start(),就会自动调用run方法那重写的run方法就进入就绪状态,什么意思,平常来说,必须要
上条代码执行完才能执行下条代码吧,那现在我们开了线程,就是说上面代码还没执行,我就能执行下面的代码
,他们是交替执行的状态。 

    4.好多代码由CPU交替执行,这个就是多线程。

    5.创建线程的第二种方法:a.创建一个实现了Runnable接口的类,假定为A;b.创建A类对象;c.利用aa创建一个
Thread类对象t;d.调用t中的方法。

    6.Thread.currentThread.getName()可以获取当前线程的名字,而setName()可以设置线程名字。第一种创建进程
的方法中,setName()由A类对象调用。
 
十四.

1.为什么需要数据流,因为光是输入输出流不能够读入和写入一个基本类型数据,而数据流能够以一种与机器无关的方式,直接读入或写入Java中的基本数据类型和string类型。

十五. 集合

1. 遍历集合的三种方式:a.for循环   
                       b.迭代器:Iterator<String> it=x.iterator();//x可为Collection对象
        while(it.hasNext()){
            String s=it.next();  //调用next方法,指针才移动
            System.out.println(s);
        }         //还要注意的是使用迭代器遍历过程中不能增加集合长度!!!!!!!
                       
                      c.增强for(只能用于遍历,没有索引,不能对集合元素进行操作)
2. ArrayList实际上是一个数组集合,查询快,增删慢; LinkedList是一个链表集合,查询慢,增删快

3. HashSet不允许存储重复元素,存储,取出都比较快。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: