1、 new将对象存储在“堆”里,用堆进行存储分配和清理比用栈进行存储分配需要更多时间。所以用new创建特别小的、简单的变量不是很有效。因此,对于基本类型不用new来创建变量,而是创建一个并非是引用的“自动”变量,这个变量直接存储“值”,丙置于栈中,因此更加高效。
基本类型所占存储空间的大小与机器硬件架构无关。
2、 作用域:
基本类型:在作用域里定义的变量只可用于作用域结束之前。
对象:可以存活于作用域之外。
3、 若类的某个成员是基本类型,java会确保它获得一个默认值;但不适用于局部情况,如果在某个方法中,基本类型变量不进行初始化,则会报错。
4、 当创建类是,就是在描述那个累的对象的外观与行为。除非用new创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据存储空间才能被分配,其方法才能供外界调用。
当一个域被声明为static时,不需要创建任何对象直接用类即可调用它,多个对象调用static域时指向的是同一存储空间。非static域则对每个对象有一个存储空间。
5、 Java.lang这个类库会默认导入每个java文件,无需手动import。若代码中调用了其他类库的类则需要手动导入,否则会报错。
6、 要在cmd中运行java,则必须要在包的父级文件夹中运行。
如:包名为com.taixin.thinkingOne 类名为HellowDate
编译:cd C:\Users\UI4\Workspaces\MyEclipse
10\thingking\src\com\taixin\thinkingOne
Javac
HellowDate.java
cd.. 退回到包的父级目录
java com.taixin.thinkingOne.HellowDate
7、javadoc生成文档时总是报java.lang.IllegalArgumentException错误,是classpath里面
符冲突引起的。我在classpath中包含了%JAVA_HOME%\lib;解决方法是重新设置classpath或者删除classpath.要注意设置完成后重启下cmd或者editplus,重启后生效!
8、 操作符:+、-、*、/、= ——————操作符都只能操作基本类型数据。
例外的是,=、==、!=——————这些操作符能操作所有对象
此外,String类支持+和+=
9、 赋值:
a) 对基本类型数据赋值就是把等号右边的内容复制给左边的变量。
b) 为对象赋值的时候,是将对象赋值给另一个对象,实际是将引用从一个地方复制到另一个地方。
10、使用标签的目的:有循环嵌套的存在,而且想从多层嵌套中break或continue。
11、如果传入的数据类型(实际参数类型)小于方法中声明的形式参数类型,实际数据类型就会被提示。Char类型会直接提升至int型。
12、不可以通过返回值区分重载方法。
13、this关键字
A、this关键字代表当前对象。
B、对于将当前对象传递给其他方法很有用
C、返回当前对象
D、一个类有多个构造器时,可使用this关键字在构造器中调用其他构造器。
E、当参数名称与数据成员名称相同是,使用this.成员名称来区分。
14、static的含义
Static方法(静态方法)内部不能调用非静态方法,反过来是可以的。而且在没有创建任何对象的前提下,可通过类本身来调用static方法。
15、清理:终结处理和垃圾回收
Java垃圾回收器只知道释放那些经由new分配的内存,它不知道该如何释放改对象的这块“特殊”(并非使用new获得的)内存
16、变量的定义会在任何方法(包括构造器)被调用之前得到初始化。
17、初始化的顺序:
静态对象(静态对象只会被初始化一次);
非静态对象;
执行构造器(静态方法)。
对象的初始化顺序:
首先执行父类静态的内容,接着去执行子类的静态的内容,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,接着执行父类的构造方法,接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。
静态变量与静态代码块、变量与初始化块的执行顺序是根据他们在类中出现的先后顺序决定的。
18、静态代码块是在类加载的时候自动执行的,且只执行一次;静态方法是被调用的时候才执行的。
19、定义数组:int a[] 或者int[] a(推荐)
初始化数组-基本数据类型:int[] a = {1,2,3} 或者int[] a = new int[3].
初始化数组-引用类型:Integer[] a = {new Integer(1), new Integer(2),3,}(最后的逗号可选)
或者:Integer[] a = new Integer[]{new
Integer(1), new Integer(2),3,}
20、可变参数列表
指定参数时,编译器实际上会填充数组
示例:
staticvoidprintArray(Object...
args){
for(Object obj: args){
System.out.print(obj +" ");
}
System.out.println();
}
publicstaticvoidmain(String[] args) {
printArray(newInteger(47),newFloat(3.14),newDouble(11.11));
printArray(47,3.14,11.11);
printArray("one","two","three");
printArray(newA(),newA(),newA(),newA());
printArray((Object[])newInteger[]{1,2,3,4,5,6});//此处由于参数已经是数组因此不会再其上执行任何转型了,需显式进行转型,以避免编译器警告。
printArray();
21、枚举类型
示例:
Public enum
Spiciness{ NOT, MILD, MEDIUM, HOT, FLAMING}
枚举类型的示例是常量(常量的命名规范:使用大写字母表示,如果在一个名字中有多个单词,用下划线将他们隔开)
枚举类型可以switch组合使用。
22、含有包名的Java文件的编译与执行:
ClassPath:包含一个或多个目录,用来查找.class文件的根目录。从根目录开始,解释器获取包的名称并将每个句点替换成反斜杠,以从classpath根中产生一个路径名称。
编译:javac
–d . CompilerTest.java (-d . 会自动生成与包结构一直的目录结构,相应的.class文件会在该目录中自动生成)
执行:java
com/taixin/packageOne/CompilerTest(/可用.替换)
常用方法:
1、String类的方法toCharArray(),返回一个char数组。
2、Arrays.toString(数组名),将产生一维数组的可打印版本。——属于java.util标准类库。
3、对象名.getClass()产生对象的类。