Java,
Java,
Java Summary KnowLedge Review
1 方法,包,变量等全部都用小写字母,首字母小写,其余的单词首字母大写
2 类名,常量名首字母大写。
3 局部变量在声明时同时进行初始化,实例变量在构造函数中进行初始化
4 Java中分为整数和浮点数,有小数点的数字是浮点数,其他都是整数,整数属于int类型,小数可以属于float和double类型,Java默认小数为double类型。所以float类型,要加上f进行强制类型转换。
double a=1;
double a=1d;
1永远为整形,两种a都是双精度整形。第一种相当于打被子放入小杯子,系统进行隐藏式转换,低级向高级类型的转换,系统将自动执行。程序员无需进行任何操作,这个就是饮食转换。第二种相当于显示类型转换 Double a=(double)1, float和double输出结果相同,不同点在于存储数据的数量级不同。
5
int a=(double)1;
这句话错在强制转换double,就不能用int 接受,小杯子接不住。
显示转换: 把把高精度的变量给低精度的变量时,or在小数转为整数时,这是一种高精度转为低精度double》float》int,必须使用显示转换:(类型名)要转换的值。当执行显示类型转换时,可能会导致精度损失,强制类型转换直接剪裁
所以: 小变大在Java中编译会不通过,,编译器不能确定是否可以剪裁,所以必须进行牵制类型转换,告诉编译器,可以剪裁。
6 char用于存储单个字符,2个字节, Java 语言可以把字符当作整数对待
char x=97; //sout输出的a 编译通过
char x='a'//Java采用unicode编码,无符号编码,可以存储65536个字符。可以处理所有国家的语言文字
int a='a';//可以把小杯子给大杯子
char b='b'+'a';//字符可以运算,不用强制类型转换也是字符
char b=(char)('a'+1);//字符可以和整数运算,算完为整数(大杯子)需要强制类型转换为char
int a= 'a'-'b'//计算完为整形,没有强制类型转换,sout为整数
7 布尔类型:只有真假两个值,不能与整数进行转换
8 常量:final变量,在程序中只能被赋值一次,在声明的时候要设置初始值。
9 转义字符:为了避免语言出现二义性,以反斜线揩油,后跟一个or多个字符,转义字符具有特殊含义(查表)
10 static变量:当类被加载时,静态变量与类的生命周期相同,静态变量被创建并分配内存空间,当类被卸载时,静态变量被摧毁,被释放内存空间。所有实例共享静态变量,当一个实例修改了值,所有其他的对象的值全都会变。
11 局部变量,在有效范围内生效,声明周期取决于有效范围,当局部变脸与成员变量名称相同时,此时成员变量被隐藏,这个成员变量在此方法中暂时失效。
12 算数运算符
++a;// 在使用a的值之前,先让a的值加1
a++//在使用a之后,a的值加1
&&//判断一个
&//判断两个
a&b//都为1 才是1 ,否则为 0,对其高精度
a|b//都为0 才是0,否则为1,对其高精度
~a//1改为0,0改为1
a^b//相同 为0, 否则为1,对其高精度
<<//高位移出,低位补零
>>//最高位为什么,高位就补什么,
>>>//无符号右移,无论左边是什么,左侧空位都填入0
移位运算只是用与整数类型,浮点类型,字符类型,布尔型都不可以。
一个数左移 n 位,就是将这个数乘以 2 的 n 次方。一个数右移 n 位,就是将这个数除以 2 的 n次方
13 数组概述:对数据的操作看Array类
int arr[];
arr=new int[5];//数组先声明,再用new运算符来分配内存,最后进行初始化
int mouth[]=new int[12];//new的时候直接分配内存,不初始化,系统自动赋予初始值0
int arr[]={1,2,3,4,5};//直接初始化赋值
int arr[]=new int[]{1,2,3,4,5};//new分配内存,外加初始化操作
Int arr[][]; arr=new int[2][3];//先声明,再用new运算符来分配内存
int arr[][]; a=new int [2][]; a[0]=new int[2]; a[1]=new int[3]//为每一维分别分配内存。
Int arr[][]={{1,2,3},{4,5,6}};
arr[1][1]=0;//初始化
14 继承概念 是一个 is-a的单向关系,父母永远不能使用子类的方法。
子类可以覆盖父类的成员变量
super.i// 调用父类
this.i//调用子类
15 方法覆盖,参数必须要一样(履行合约),
返回类型一样or该类型的子类(兼容),
不能降低方法的存取权限,存取权限必须相同,or更为开放
16 方法重载:一个方法可以有多个版本方便调用,
条件为使用不同的参数,重载的条件是要使用不同的参数(个数和类型),
返回类型可以自由的定义。
可以更改存取权限。
17 编译器是根据引用类型来判断是由那些method可以调用,而不是根据Object确切的类型。
当你把对象装进ArrayList时,不管她原来是什么,你只能把它当作Object。从ArrayList 取数引用时,引用的类型只会是Object
编译器是根据引用类型来判断有哪些method和attribute可以调用,而不是根据Object实际的类型,相当于你获得的是,对象引用变量的遥控器,他只能遥控对象引用变量类型的对象。
此时:需要进行强制类型转换:
Dog d=(Dog)o;
18 interface 接口: 100%的纯抽象类,实现接口的类可以来自任何地方,可以实现多个接口
接口 里面的变量全部都是public static final 修饰,方法全部都是public abstract
接口可以继承接口
19 Abstract 抽象类:
20 Java栈 堆理解,以及JVM调优
在Java的GC机制中,如果一个对象有着具体的引用,那么是不会被GC自动回收的。 要回收的垃圾“无非是那些不可能再被任何途径使用的对象”
Object obj=new Object()//写在100个循环内等于你有100个引用对应了100对象
obj=new Object()//写在100个循环内等于你使用一个引用分别100次调用了100个对象
//所以当后一个对象init后,前一个对象已经是“无引用状态”,会很快的被GC自动回收(在你的循环还未结束时候,可能已经进行了多次GC回收
JVM 有个优秀的算法:
JVM方法栈,一个方法的调用{}产生一个栈,这个站在方法调用时计算出有几个局部变量,会过滤作用域,如你的循环后面再建立一个局部变量,那JVM认为只有一个局部变量,在相同作用域内,只需要一个位置来存放局部变量即可,也就是说运行到大括号后,出了大括号下一个局部变量就可以接着使用这个栈的位置继续执行后续代码了,所以 100次循环,100次引用变量,每次都会释放,因为每次都相当于一个{}作用域结束
Java 基本数据类型和引用数据类型的存放位置:
基本数据类型:
局部变量:变量名和值都在方法栈上,
实例变量:变量名和值都在内存堆
引用数据类型:
局部变量:变量在方法栈,变量指向的对象在堆
实例变量:变量名和变量名指向的对象都在堆
21 构造函数:
如果没有写构造函数,编译器会编写默认构造函数,构造函数会在对象能够被赋值给引用之前就执行。这代表你有机会在对象被使用之前介入。
构造函数不会被继承。
如果你写了一个有参数的构造函数,并且你需要一个没有参数的构造函数,则你必须自己手动创建。
如果类有一个以上的构造函数,则参数一定要不一样。包括了参数的顺序与类型,只有是不一样就可以
继承与构造函数之间的关系:
每个对象不只保存自行声明的变量,还有从父类来的所有东西,(至少会带有object,因为每个类都有继承过这个类),因此在创建某个对象时,对象会取得所有实例变量所需的空间,当然包括一路继承下来的东西。
子类可以调用父类的构造函数,使用super关键字,也可以从某个构造函数调用重载版本的另一个构造函数,使用this关键字。
22 对于static的理解:
public final static 三个关机子之间没有任何关系
静态的方法不能调用非静态的变量,非静态的方法。
静态变量时在类被加载时初始化的,类会被加载时因为Java虚拟机认为它该被加载了.Java虚拟机会加载某个类是因为第一次有人尝试要创建类的新实例,or是使用该类的静态方法or变量。程序员其实可以选择强制Java虚拟机去加载某个类,但往往不需要这么做,大部分的情况下还是让Java虚拟机来决定会比较好
静态都项目的初始化会有两项保证:
静态变量会在该类的任何对象创建之前就完成初始化
静态变量会在该累的任何静态方法执行之前就初始化
static变量也会被设定默认值,就像实例变量会被设置默认值一样。
静态final变量 是常数。
23 如何理解final:
可以修饰静态变量,非静态变量,实例变量,局部变量,甚至是方法的参数,不管哪一种,都代表它的值不能变动。
可以使用final来防止方法的覆盖or创建子类
24 Java 静态类常用API
Math类:对数字计算相关,先看Math类 random(),abs(),round(),min(),max(),
Stirng类:对于Sring类的操作先看String类。
Scanner类用于从控制台得到键盘输入的信息。
Character类:对于字符的操作先看Character类。
Arrays类:对数组操作先看Arrays类。
25 异常处理:
花在处理异常的程序设计的时候会比花在自己创建抛出异常的时间还要多很多。
如果try块失败了,抛出异常,流程会马上转移到catch块。当catch块完成时,会执行finally块,finally完成时,就会继续执行其余的部分,如果try块 or catch块 有return指令,finally还是会执行!流程会跳到finally然后再回到return指令。
26 如何得到现在的时间:
27 字符比较大小的原理:
Two characters can be compared using the relational operators just like comparing two numbers, This is done by comparing the Unicodes of the two characters,
For example:
28 数组的复制:
1 use a loop to copy individual elements one by one
2 use the static arraycopy method in the System class(深拷贝)
The arrayCopy methid does not allocate memeory space for thetarget array.The target array must have already been created withe its memory space allocated. After the copying takes place,targetArray and sourceArray have the same content but independent memory locations.
3 use the clone method to copy arrays
29 可变参数列表:
可变长度的参数,可以接受数组作为实参,也可以用一大串相同类型的数作为实参。
作为形参,必须作为参数列表的最后一个参数。
形参声明时候:
30 局部变量必须初始化,
32 如何从系统中得到时间:
1 using System.currentTimeMillis() // obtain the cuuent time ,then used the dividion and remainder operators to extract the current second,minute,and hour.
2 new Date().getTime()// returnthe elapsed time since January 1 1970,GMT, and the toString() method to return the date and time as a string.
3
33 Java 对于超大数字和大小数的处理
The BigInteger and BigDecimal classes can be used to represent integers or decimal numbers of any size and precision.
You can use new BigInteger(String) and new Big Decimal(String) to create an instance of BigInteger and BigDecimal, use the add, substract ,multiply,divide,and remainder meghods to perform aritmetic operations, and use the compareTo method to compare two big numbers.
34 创建字符串的方式
String newString=new String(stringLiteral);// 1 new 创建字符串
char[] charArray={'G','o','o','d',' ','D','a','y'};
String message=new String(charArray); // 2 通过数组创建字符串
35 Matchcing,Replacing and Splitting by Patterns
Often you will need to write code that validates user input, such as to check whether the input is a number, a string with all lowercase letters, or a Social Security number.
字符串和字节数组可以相互转换,字符串可以和各种数据类型相互转换。
36 格式化字符串
String.format(item1,item2,…,itemk)
37 父类的静态变量(以及实例变量) 和静态方法都可以被继承,静态方法被重写后隐藏父类的静态方法,父类的静态方法只能通过,
Animal.method进行调用。静态变量也会被隐藏,Anmimal.method和Dog.method分别调用自己的静态变量。
对于实例变量而言,子类会隐藏父类的实例变量.
Animal a=new Dog();
a.method // 子类会隐藏父类的实例变量,调用的都是子类的实例变量。
Animal a= new Animal()
a.method //调用的才是父类的实例变量。
38 instanceof 关键字
if(myObject instanceof Circle){
System.out.println("The circle diameter is "+ ((Circle)myObject).getDiameter());
......
}
39 Difference between Uncheck exception and checked exception
RuntimeException, Error and their subclasses are known as unchecked exceptions
All other excpetions are known as checked excpetions. meaning thar the compiler forces the programmer to check and deal with them in atry-catch block or declare it in the method header.
In most cases, unchecked exceptions reflext programming logic errors that are unrecoverable. Unchecked exceptions can occur anywhere in a program.
To avoid cumbersome overuse of try-catch blocks, Java does not mandate that you write code to catch or declare unckecked exceptions.
40 Java 文件读写单独复习
41 接口中所有数据field都是public static final 所有方法都是public abstract
42 Comparable interface
you want ro design a generic method to find the larger of two objects of the same type. The Comparable interface defines the compareTo method for comparing objects
The Compareable interface is a generic interface. The generic type E is replaced by a concrete type when implementing this interface.
43 Cloneable interface
This is a marker interface. The Cloneable interface specifies that an object can be cloned. Its Objects can be clones usin the clone() method defined in the Object class
1.首先我们需要知道Object类中一个clone()的方法,并且是protected关键字修饰的本地方法(使用native关键字修饰),我们完成克隆需要重写该方法。
注意:按照惯例重写的时候一个要将protected修饰符修改为public,这是JDK所推荐的做法,但是我测试了一下,
复写的时候不修改为public也是能够完成拷贝的。但是还是推荐写成public。
2.我们重写的clone方法一定要实现Cloneable接口。虽然这个接口并没有什么方法,但是必须实现该标志接口。
如果不实现将会在运行期间抛出:CloneNotSupportedException异常
3.Object中本地clone()方法,默认是浅拷贝
总结几条使用建议:
1.一定要实现Cloneable接口
2.复写clone()方法,注意:默认是浅拷贝,这里需要将引用类型进行深拷贝处理
44 深拷贝和浅拷贝
深拷贝:
获取的是一个独立对象,和原有对象拥有不同的内存地址
基本元素类型,两者是隔离的
浅拷贝:
创建一个新对象,然后新对象的每个值都是由原对象的值,通过=进行赋值的
45 泛型(泛型类,泛型接口,泛型方法)
Public interface Compable{
}
Public class GenericStack{
}
Public static void print(E[] list){
}
注意 :
1 不可以自定义泛型异常类,和捕获泛型异常类
2 静态上下文中,不能使用泛型
3不能 new E()
4 没有泛型数组 E[]
相关文章
- 暂无相关文章
用户点评