黑马程序员-java基础总结

来源:互联网 发布:微信运动图片 知乎 编辑:程序博客网 时间:2024/06/10 02:42

---------------------- android培训、java培训、期待与您交流! ----------------------

一.标识符:

在Java语言中,标识符是以字母、下划线(…)或美元符($)开头,由字母、数字、下划线(一)或美元符($)组成的字符串。标识符区分大小写,长度没有限制。除以上所列几项之外,标识符中不能含有其他符号,当然也不允许插入空格,在程序中,标识符可用作变量名、方法名、接口名、类名等。

二.关键字:

就是java中被特别保留出来有其他用处的,不能被当成是标识符用的一些字符组合。常见的关键字如下:

abstract
do
implement
private
this
boolean
double
import
protected
throw
break
else
instanceof
public
throws
byte
extend
int
return
transient
case
false
interface
short
true
catch
final
long
static
try
char
fianlly
native
strictfp
void
class
float
new
super
volatile
continue
for
null
switch
while
default
if
package
 
synchronized

常见的重要的关键字总结如下:

1.static

   (1)通常在一个类中定义一个方法为static,就是说无需本类的对象就可以直接调用。

   (2)静态变量和静态方法类似。所有此类实例共享此静态变量,也就是说类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final就另当别论了。

   (3)static定义的变量会优先于任何其他非static变量,不论其出现顺序如何。

   (4)static{}这是用来显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。

   (5)在涉及到继承的时候,会先初始化父类的static变量,然后是子类的。

   (6)通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需要实例一个外部类。

2.private

意味着除非特定的类,而且从那个类的方法里,否则没有人能访问那个成员。同一个包内的其他成员不能访问private成员

3.protected

被此修饰符修饰的变量,只能在被继承的类和在类本身的方法中使用

4.final

根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,没有子类,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法。注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

5.super关键字

Super指的是当前父类的对象,即在子类继承自父类以后可以通过super关键字引用父类的对象从而调用父类中的方法和this关键字对比理解,this关键字指的就是当前类的对象,可以避免混淆。

三.类型转换

 1 数据类型转换的种类

         java数据类型的转换一般分三种,分别是:   (1). 简单数据类型之间的转换    (2). 字符串与其它数据类型的转换    (3). 其它实用数据类型转换

2 简单数据类型之间的转换  

 在Java中整型、实型、字符型被视为简单数据类型,这些类型由低级到高级分别为[(byte,short,char)--int--long--float--double

 简单数据类型之间的转换又可以分为:   

●低级到高级的自动类型转换  

  ●高级到低级的强制类型转换   

●包装类过渡类型能够转换

2.1自动类型转换   

低级变量可以直接转换为高级变量,笔者称之为自动类型转换,例如,下面的语句可以在Java中直接通过:byte b;int i=b;long l=b;float f=b;double d=b;    如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如\r   char c='c';     int i=c;     System.out.println("output:"+i);输出:output:99;对于byte,short,char三种类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。short i=99;char c=(char)i;System.out.println("output:"+c);输出:output:c;但根据笔者的经验,byte,short,int三种类型都是整型,因此如果操作整型数据时,最好统一使用int型。

2.2强制类型转换  

 将高级变量转换为低级变量时,情况会复杂一些,你可以使用强制类型转换。即你必须采用下面这种语句格式:int i=99;byte b=(byte)i;char c=(char)i;float f=(float)i;    可以想象,这种转换肯定可能会导致溢出或精度的下降,因此笔者并不推荐使用这种转换。

2.3包装类过渡类型转换   

在我们讨论其它变量类型之间的相互转换时,我们需要了解一下Java的包装类,所谓包装类,就是可以直接将简单类型的变量表示为一个类,在执行变量类型的相互转换时,我们会大量使用这些包装类。Java共有六个包装类,分别是Boolean、Character、Integer、Long、Float和Double,从字面上我们就可以看出它们分别对应于 boolean、char、int、long、float和double。而String和Date本身就是类。所以也就不存在什么包装类的概念了。   在进行简单数据类型之间的转换(自动转换或强制转换)时,我们总是可以利用包装类进行中间过渡。   一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。例如:  例1,当希望把float型转换为double型时:  float f1=100.00f;   Float F1=new float(f1);   Double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法   当希望把double型转换为int型时:   double d1=100.00;     Double D1=new Double(d1);     int i1=D1.intValue();   当希望把int型转换为double型时,自动转换:    int i1=200;     double d1=i1;    简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。即:Boolean(boolean value)、Character(char value)、Integer(int value)、Long(long value)、Float(float value)、Double(double value)而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换,例如,对于一个双精度实型类,intValue()可以得到其对应的整型变量,而doubleValue()可以得到其对应的双精度实型变量。  

3 字符串型与其它数据类型的转换     通过查阅类库中各个类提供的成员方法可以看到,几乎从java.lang.Object类派生的所有类提供了toString()方法,即将该类转换为字符串。例如:Characrer,Integer,Float,Double,Boolean,Short等类的toString()方法toString()方法用于将字符、整数、浮点数、双精度数、逻辑数、短整型等类转换为字符串。

四.重载问题

(1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。        (2)Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。        (3)重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

五.运算符优先级

其实在实际的开发中,不需要去记忆运算符的优先级别,也不要刻意的使用运算符的优先级别,对于不清楚优先级的地方使用小括号去进行替代

六.数组的常见操作

1.获取最值,主要思路是,先将任意一个数组中的元素定义为初始变量,再用数组其他元素与之遍历比较,若比其大,则代换,最后所得到的元素即为最大值,反之操作可获得最小值:

关键代码:public static int getMax(int[] arr){int max = arr[0];for(int x=1; x<arr.length; x++){if(arr[x]>max)max = arr[x];}return max;}

2.选择排序,思路:

关键代码:

/*选择排序。内循环结束一次,最值出现头角标位置上。*/public static void selectSort(int[] arr){for (int x=0; x<arr.length-1 ; x++){for(int y=x+1; y<arr.length; y++){if(arr[x]>arr[y]){/*int temp = arr[x];arr[x] = arr[y];arr[y]= temp;*/swap(arr,x,y);}}}}

2.冒泡排序

/*冒泡排序*/public static void bubbleSort(int[] arr){for(int x=0; x<arr.length-1; x++){for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。{if(arr[y]<arr[y+1]){/*int temp = arr[y];arr[y] = arr[y+1];arr[y+1] = temp;*/swap(arr,y,y+1);//将换位抽取成方法}}}}

3.折半查找

/*折半查找。提高效率,但是必须要保证该数组是有序的数组。*/public static int halfSearch(int[] arr,int key){int min,max,mid;min = 0;max = arr.length-1;mid = (max+min)/2;while(arr[mid]!=key){if(key>arr[mid])min = mid + 1;else if(key<arr[mid])max = mid - 1;if(min>max)return -1;mid = (max+min)/2;}return mid;} 

---------------------- android培训、java培训、期待与您交流! ----------------------