Java学习之总结
一.访问控制符:
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不允许存储重复元素,存储,取出都比较快。
- java学习一路总结
- Java线程学习和总结
- 传智播客JAVA培训spring学习总结(2010520)
- java学习错误一路总结
- 十年总结(七):学习JAVA,爱上JAVA
- JAVA基础学习总结及注意事项
- java web 学习总结
- 关于pl/sql调用java的学习总结(附代码)
- java学习总结-序
- Java学习总结-抽象类
- [转载]Java学习总结(Java源文件、JavaDoc文档)
- Java_WEB开发_struts2学习的总结
- 关于Java IO流学习总结
- Java 语言学习总结
- 哈希算法-----JAVA 源码中实现的HashMap学习总结
- JAVA学习个人经验总结二: 兼收并蓄,不要试图去研究它.
- java学习基础篇之WEB开发中常用Jsp/Bean相关技术总结(转)
- java学习总结-序
- 关于Java IO流学习总结
- Java学习总结之第一章Java基础