1、java语言不允许直接访问对象,而是通过对对象的引用来操作对象。
2、常用javadoc标记:
@author:指定java程序作者@version:指定源文件版本@deprecated:不推荐使用的方法@param:方法的参数说明信息@return:方法的返回值说明信息@see:“参见”用于指定交叉参考的内容@exception:抛出异常的类型@throws:抛出的异常和exception同义
3、基本数据类型
4、(char)字符型通常用于表示单个的字符,字符常量必须使用单引号(')括起来
byte, 1个字节short, 2个字节int, 4个字节long 8个字节char 2个字节float 4个字节double 8个字节boolean 1位
5、一旦数组中的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变。
6、数组元素和数组变量在内存里是分开存放的;实际的数组对象被存储在堆内存(heap)中
7、return关键字后还可以跟变量、常量和表达式
8、栈内存和堆内存之分:
简易答案:当一个方法执行时,每个方法都会建立自己的内存
栈,在这个方法内定义的变量将会逐个放入这块栈内存里
随着方法的执行结束,这个方法的内存栈也将自燃销毁。因此,所有在方法定义的局部变量都是放在栈内存中的。
当我们在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本很大),这个
运行时数据区就是堆内存。堆内存中的对象不会随方法的结束而销毁,即使方法结束后这个对象还可能被另一个引用变量所
引用。
9、初始化总是在构造器执行之前被调用。JAVA还提供了一种静态初始化,静态初始化块用于初始化类,在类初始化阶段被执行。如果继承树里的某一个类需要被初始化,系统将会同时初始化该类的所有父类。
10、构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此,java语言还提供了一个功能:如果程序员没有为一个类编写构造器,则系统会为该类提供一个默认的构造器。一旦程序员为一个类提供了构造器,系统将不再为该类提供构造器。
11、有static修饰的成员属于类本身,没有static修饰的成员属于该类的实例
12、构造器不能定义返回类型,如果为构造器定义了返回值类型,编译时不会出错,但JAVA会把这个所谓的构造 器当成方法来处理
13、当一个对象被创建成功以后,这个对象将保存在堆内存中,JAVA程序不允许直接访问堆内存中的对象,只能通过该对象的引用操作该对象。也就是说,不管是数组还是对象,都只能通过引用来访问它们。
14、this关键字总是指向调用该方法的对象。this作为对象的默认引用有两种方式:
a.构造器引用该构造器正在初始化的对象。
b.在方法中引用调用该方法的对象。
15、java里面方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值的副本(副制品)传入方法内,而参数本身不受任何影响。
16、长度可变的形参只能处于形参列表的最后。一个方法中只能包含一个长度可变的形参。
17、局部变量必须初始化,如果只声明未赋值,使用时编译通不过。
18、如果一个java源文件里定义的所有类都没有使用public修饰,则这个java源文件的文件名可以是一切合法的文件名;但如果一个java源文件里定义了一个public修饰的类,则这个源文件的文件名必须与public修饰的类的类名相同
19、java常用包:
java的核心类都放在java这个包以及子包下,java扩展的许多类都放在javax包及子包下。
java.lang: 包含了java语言的核心类,如String,Math,System,Thread类等,使用这个包下的类无须使用import语句导入。
java.util: 包含了java的大量工具类/接口和集合框架类/接口,例如Arrays和List,Set等
java.net: 包含了一些java网络编程相关的类/接口
java.io: 包含了一些java输入/输出编程相关的类/接口
java.text: 包含了java格式化相关的类
java.sql: 包含了java进行JDBC数据库编程的类/接口
20、方法的重写要遵循“两同两小一大”规则,“两同”即方法名相同、形参列表相同;“两小”指的是子类方法返回值类型应比父类返回值类型更小或相等,子类方法声明抛出的异常类应比父类更小或相等;“一大”指的是子类方法的访问权限应比父类方法的访问权限更大或相等。
21、如果在子类里定义了与父类已有变量中同名的变量,那么子类中定义的变量会隐藏父类中定义的变量。注意不是完全覆盖
22、java引用变量有两个类型:一个是编译时类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。
23、与方法不同的是,对象的Filed不具备多态。
24、引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则执行它运行时类型所具有的方法。因此,编写java代码时,引用变量只能调用声明该变量时所用类里包含的方法。例如,通过Object p=new Person()代码定义一个变量P,则这个P只能调用Object类的方法,而不能调用Person类里定义的方法。
通过引用变量来访问其包含的实例Filed时,系统总是试图访问它编译时类型所定义的Filed,而不是它运行时类型所定义的Field
25、如果在子类里面定义了与父类中已有的同名变量,那么子类中定义的变量会隐藏父类中定义的变量,注意不是覆盖,因此系统在创建子类对象时,依然会为父类中定义的、被隐藏的变量分配内存空间
26、当java创建一个对象,系统先为该对象的所有实例Field分配内存(前提是该类已经被加载过了),接着程序开始对这些实例变量执行初始化,其初始化顺序是:先执行初始化块或声明Field时指定的初始值,再执行构造器里指定的初始值
27、对于instanceof运算符而言,当前面对象是后类的实例或其子类的实例时都将返回true
28、对于一个final变量来说,不管是它是类Field、实例Field、还是局部变量,只要该变量满足3个条件,这个final变量就不再是一个 变量,而是相当于一个直接量。
1.使用final修饰符修饰;
2.在定义该final变量时定义了初始值;
3.该初始值可以在编译阶段就被确定下为
29、java会使用常量池来管理曾经用过的字符串直接量,例始执行String a="java";语句之后,系统的字符串池中就会缓存一个字符 串"java"; 如果程序再次执行String b="java";系统将会让b直接指向字符串池中的"java"字符串,因此a==b将返回true
30、Integer缓存了-128-127之间的值,所以这之间的数字只要通过Integer.valueOf()可以得到,不会创建新的对象。
如:
Integer in1= Integer.valueOf(100);
Integer in2= Integer.valueOf(100);
System.out.println(in1==in2); //true;
Integer in3= Integer.valueOf(200);
Integer in4= Integer.valueOf(200);
System.out.println(in3==in4); //false;
31、抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。即使抽象类里面不包含抽象方法,这个抽象类也不能创建实例
32、没有所谓的类抽象方法: static abstract
33、接口与抽象类的区别:
1.接口体现的是一种规、抽象类体现的是一种模板设计2.接口只能包含抽象方法,抽象类可以包含普通方法。3.接口里不能有静态方法,抽象类可以有静态方法4.接口里只能定义静态常量field,不能定义普通field,抽象类里面都可以有5.接口不包含构造器,抽象类可以包含构造器,抽象类里面的构造器并不是用于创建对象,而是让其子类调用构造器来完成属于抽象类的初始化操作6.接口可以多继承,类只能有一个直接父类。