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

java基础知识点(一)

2016-04-10 21:20 239 查看
这些天闲来无事,就整理了一些关于java的基础知识,就当是对自己java基础的总结吧。

java面向对象的几个基本特征

1、如果一个类中包含了抽象方法,那么这个类一定是抽象类。

2、如果某个类是抽象方法,那么该类可以包含具体方法(有声明,有实现)。

3、如果一个类中包含了抽象方法,那么这个类一定要声明称abstract class,也就是说,该类一定是抽象类,分之,如果某个类是抽象类,那么该类既可以包含抽象方法,也可以包含具体方法。

4、无论何种情况,只要一个类是抽象类,那么这个类就无法实例化。

5、在子类继承父类(父类是一个抽象类)的情况下,那么该子类必须要实现父类中所定义的所有抽象方法,否则,该子类需要声明称abstract class。

6、接口(interface):接口的地位等同于class,接口中的所有方法都是抽象方法,在声明接口中的方法的时候,可以使用abstract关键字,也可以不使用,通常情况下,都会省略abstract关键字。

7、可以将接口看做是特殊的抽象类(抽象类中可以有具体方法,也可以有抽象方法,而接口中只能有抽象方法,不能有具体方法)。

8、类可以实现接口,实现使用implements 关键字,代表了某个类实现了某个接口,接口中的方法都是public的,接口中也可以定义成员变量。

9、接口中的成员变量都是public,final,static的。

10、一个类实现了某个接口,那么该类必须要实现接口中声明的所有方法,如果该类是一个抽象类,那么久无需实现接口中的方法了。

11、一个类不能既是abstract的,又是final的,因为abstract的主要目的是定义一种约定,让子类去实现这种约定,而final表示该类不能被继承,这样abstract希望该类可以被继承而final明确说明该类不能被继承,两者相互矛盾。因此一个类不能既是final的又是abstract的。

12、Java是单继承的,也就是说某个类只能有唯一一个父类,一个类可以实现多个接口,多个接口之间使用逗号分隔。

13、多态:所谓多态,就是父类型的引用可以指向子类型的对象,或者接口类型的引用可以指向实现该接口的类的实例。关于接口与实现接口的类之间的强制类型转换方式与父类和子类之间的强制类型转换方式完全一样。

14、Static关键字: 可以用于修饰属性,也可以修饰方法,还可以用户修饰类。

15、Static修饰属性: 无论一个类生成了多少个对象,所有的这些对象共同使用唯一的一份静态的成员变量,一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static的,那么我们可以通过类名.成员变量名来调用(推荐这种方式)。

16、静态方法只能继承,不能重写(override)。

17、Final关键字: final可以修饰属性,方法,类。

18、Final修饰类: 当一个类被final修饰时,表示该类是一个终态类,即不能被继承。

19、Final修饰方法:当一个方法被final所修饰时,表示该方法是一个终态方法,即不能被重写(Override)。

20、当final修饰一个原生数据类型时候,表示该原生数据类型的值不能发生变化(比如说不能从10变成20);如果final修饰一个引用类型时,表示该引用类型不能再指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。

21、对于final类型的成员变量,一般来说有两种赋值方式:

a) 在声明final类型的成员变量的时候就赋初值。

b) 在声明final类型的成员变量的时候不赋初值,但在类的所有构造方法中都为其赋初值。

10、static代码块: 静态代码块。静态代码块的作用也是完成一些初始化工作,首先执行静态代码块,然后执行构造方法。静态代码块在类被加载的时候执行,而构造方法是在生成对象的时候执行,要想调用某个类来生成对象,首先需要将类加载到java虚拟机上(JVM),然后又JVM加载这个类来生成对象。

11、类的静态代码块只会执行一次,是在类被加载的时候执行的,因为每个类只会被加载一次,所以静态代码块也只会被执行一次,而构造方法则不然,每次生成对象的时候都会调用类的构造方法,所以new一次就会调用构造方法一次。

12、如果继承体系中既有构造方法,又有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层的类的静态代码块,然后再去执行最顶层的构造方法,一直执行到最底层的构造方法。注意:静态代码块只会被执行一次。

13、不能在静态方法中访问非静态成员变量;可以在静态方法中访问静态的成员变量,可以在非静态方法中访问静态的成员变量。

14、总结:静态的只能访问静态的;非静态的既可以访问静态的,也可以访问非静态的。

15、不能再静态方法中使用this关键字。

 

关于String

1、对于String类的equals() 方法来说,他是判断的当前字符串与传进来的字符串内容是否一致。

2、对于String对象的相等性判断来说,请使用equals()方法,而不要使用“==”号去判断。

3、String是常量,其对象一旦创建完成就无法再去改变。当使用+拼接字符串时,会生成新的String对象,而不是向原有的String对象追加内容。

4、所有new出来的对象都是在堆中存放,而字符串池是在栈中存放的。

5、String pool:字符串池。

6、String  s = “aaa”;(采用字面值方式赋值)

a) 查找String pool 中是否存在“aaa”这个对象,如果不存在,则在String pool中创建一个“aaa” 对象,然后将String pool中的这个“aaa”对象的地址返回回来,赋给引用变量s,这样s会指向String pool中的这个“aaa”字符串对象。

b) 如果存在,则不创建任何对象,直接将String pool中的这个“aaa”对象的地址返回回来。

7、String  s = new String(“aaa”);

a) 首先在String pool中查找有没有“aaa”这个字符串对象,如果有,则不再String Pool 中再去创建“aaa”这个对象了,直接在堆(heap)中创建一个“aaa”字符串对象,然后将堆中的这个“aaa”对象的地址返回回来,赋给s引用,导致s指向了堆中创建的“aaa”字符串对象。

b) 如果没有,则首先在String Pool中创建一个“aaa”对象,然后再在堆中创建一个“aaa”对象,然后将堆中的这个“aaa”对象的地址返回回来,赋给s引用,导致s指向了堆中所创建的这个“aaa”对象。

8、public boolean equals(Object  obj):该方法定义在Object当中的,java中的每个类中都会具有这个方法,对于Object类的equals方法来说,他是判断调用equals方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。对于object类的equals方法来说,它等价于 == 。

9、对于String类的equals方法来说,它是判断当前字符串与传进来的字符串的内容是否一致。

10、String底层的实现是将两个字符串转换成字符数组,一个一个字符进行比较。

11、总结:对于String对象的相等性判断来说,请使用equals方法,而不要使用==。因为大多数情况下,都是判断两个字符串的内容是否相等,而不会去判断两个对象是不是同一个对象。对于Object类的equals方法来说,它是判断两个对象是不是同一个对象,而对于继承了Object类的其他的类来说,如果它重写了equals方法,那么才是判断两个字符串的内容是不是一致的。如果没有重写Object的equals方法,此时是继承了equals方法,还是判断的是两个对象的地址。

12、相等性的比较(==)

a) 对于原生数据类型来说,比较的是左右两边的值是否相等。

b) 对于引用类型来说,比较左右两边的引用是否指向同一个对象,或者说左右两边的引用地址是否相同。

13、java.lang.Object类。Java.lang包在使用的时候,无需显示导入,编译时由编译器自动帮我们导入。

14、当打印引用的时候,实际上会打印出引用所指对象的toString方法的返回值,因为每个类都直接或者间接的继承至Object,而Object类中定义了toString方法,因此每个类都有toString方法。

15、访问修饰符

a) public(公共的):被public所修饰的属性和方法可以被所有类访问。

b) private(私有的):被private所修饰的属性和方法只能在该类内部访问。

c) protected(受保护的):被protected所修饰的属性和方法可以在类的内部,相同包以及该类的子类所访问。

d) 默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。

16、关键字Instanceof: 判断某个对象是否是某个类的实例。语法形式:引用名 instanceof 类名(接口名),返回一个boolean值。

People people = new Man();

System.out.println(people instanceof People);//返回结果为true

因为Man是People的子类,根据继承,子类就是父类,因此Man也可以看做是People的实例。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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