java零碎知识

来源:互联网 发布:博客互踩软件 编辑:程序博客网 时间:2024/04/25 03:46

java基础知识整理(一)

前言

随着所学习的知识增多,感觉头脑很凌乱,加上本人智商不高,记性不好,深知做笔记的重要性,就此开始写博客,小可纯属小白,难免认识不足,望各网友多多指点教导,不要喷哦吐舌头,尤其是不要骂脏话哦,多谢多谢微笑,let's go!

一. 方法的覆盖和重载

1.  首先,简述一个概念,参数列表(也称为参数签名):包括参数类型,个数,排列顺序。三个中有一个不同就认为是参数列表不同。
2.  方法覆盖
定义:子类继承父类中的方法并对其方法体进行重写,一般意义上是为了增强方法功能。
覆盖原则:
<1>覆盖方法必须和原方法有相同的返回值类型,方法名和参数签名。
<2>覆盖方法不能比原方法访问性差,就是不允许缩小访问权限。
<3>覆盖方法不能比原方法抛出更多的异常。
<4>原方法不能使final。
<5>原方法的权限不能是private。
<6> 原方法不能使static。
3. 方法重载
定义:同类中所有同名方法之间的关系称为重载。
重载规定:同类中,所有重载的方法名必须相同,其他的返回值类型和参数签名不一定要相同。
4. 覆盖和重载的异同点
相同点:无论是覆盖还是重载,都体现了java语言的多态性,另外方法的覆盖和重载都要求有相同的方法名。
不同点:见方法覆盖和重载的原则或规定。

二. 原始类型和引用类型

1. java中每个原始数据类型都对应各自的对象封装类,如下表。


原始类型封装类型booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubleDouble

2.  原始类型和引用类型的不同点
<1> 原始类型的默认值依类型不同而定,引用类型默认值是null;
<2> 原始类型在栈上分配值,而引用类型在栈上只有地址指针(也即引用),其值在堆上,属于动态分配;
<3> 判断原始类型相等与否用 ==,而判断引用对象相等与否用 .equals()方法;
<4> 引用类型可以序列化,原始类型不行;
<5> 在集合中存储只能用引用类型,而不能用原始类型。
3. 补充知识点
序列化:java中为了处理对象流,可以将对象的内容进行流化,这需要对象对应的类实现接口Serializable。流化的对象可以存储在硬盘,网络等,以便传输。

三. 修饰符

1.  public 

无论所属的包定义在哪里,该类(接口,成员)都是可访问的。

2.  private

该种成员只能在定义它的类中访问。

3.  protected

该种成员只能在定义它的包中被访问,或定义该成员的子类可以访问。

4.  static

用static修饰的成员或代码块只属于类,而不依赖于任何该类的对象实例,也即可以直接用类名引用其静态成员;另外,由于静态成员或代码片段只属于类,所以在类加载时只执行一次。静态方法中不能调用非静态成员,因为非静态成员都要依赖于具体的对象实例;反之则可以在非静态方法中调用静态成员,且可以用具体对象实例(或this)引用静态成员,这和我第一句话“只属于类,而不依赖于任何该类的实例”并不矛盾,因为不依赖不是说也不属于累的具体对象,所以当对象建造后,仍然可以用this引用属于给类的静态成员,下面有实例:

package StaticTest;public class StaticTest {public static int value = 33;public StaticTest(){}public StaticTest(int val){this.value = val;}public static void inc1(){value++;}public void inc2(){this.value++;}}package StaticTest;public class MainTest {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(StaticTest.value);StaticTest.inc1();System.out.println(StaticTest.value);StaticTest test = new StaticTest();test.inc2();System.out.println(StaticTest.value);}}

   之前看一篇博客上面有个面试题挺好,在此引用以供大家学习。

原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html

public class Test extends Base{     static{        System.out.println("test static");    }         public Test(){        System.out.println("test constructor");    }         public static void main(String[] args) {        new Test();    }} class Base{         static{        System.out.println("base static");    }         public Base(){        System.out.println("base constructor");    }}

输出结果:

base statictest staticbase constructortest constructor

解析:

主要分析执行过程,找到main方法入口后,开始加载Test类,发现Test类继承字base类,转而加载Base类,发现有static代码块,便执行,完回到子类Test,同样执行Test中的static代码块,然后开始构造Test对象,调用顺序是,以此调用父类构造函数,最后调用子类构造函数,所以输出如上结果。


5.  abstract

修饰抽象类或方法,如果修饰类,则该类位抽象类,不能有对应的实例对象;如果修饰方法,则该方法为抽象方法,不能有方法体,由子类覆盖实现该抽象方法,这也是java多态性的表现;有抽象方法的类是抽象类,抽象类中不一定全是抽象方法,可以是一般方法;继承抽象类的子类只有实现父类的所有的抽象方法才能建造对应的实例对象,不然仍然是抽象类。    


6.  final

修饰类,方法和成员变量。修饰的类不能被继承,修饰的方法不能被覆盖,修饰的成员变量一经初始化后不能改变。 



今天的基础知识暂时总结这么多,下次继续,小可劣文若有幸被各位路过朋友看到,请多多指正教导,感激不尽。祝各位生活愉快












0 0
原创粉丝点击