以前学习java时总结了一些笔记,接下来的一段时间里我会对这些笔记进行整理,并结合一些新的资源加以优化。一些非常简单但是比较重要的知识点仍加以保留,而与C、C++等语言完全相同的基本特性则部分省去,算是为新人们提供一些指引吧。废话不多说,Go!
一、Java代码的常见命名规则
1.1:包 package
* 最好是域名倒过来,要求所有的字母小写,比如 com.baidu.mypackage
1.2:类class或者接口interface
* 如果是一个单词首字母大写,比如 Tool
* 如果是多个单词每个单词首字母大写(驼峰标识), 比如 MyTool
1.3:方法或者变量
* 如果是一个单词全部小写,比如 reverse()
* 如果是多个单词,从第二个单词首字母大写,比如 reverseString()
1.4:常量
* 如果是一个单词,所有字母大写,比如PI
* 如果是多个单词,所有的单词大写,用下划线区分每个单词,比如 DAYS_OF_YEAR
二、 数据类型
2.1 Java的数据类型主要分为两种,①基本数据类型和②引用数据类型。
*基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上。
int a = 10;
a = 34;
double b = 10.1;
*引用数据类型在被创建时,首先要在栈上给其引用分配一块内存,而该对象的所有信息都存储在堆上,栈上面的引用存储着对象的地址,从而指向堆中的对象。这里的引用非常类似于C++中的指针。
Student s1 = new Student("Trump",23);
s1 = new Student("Mr Chairman",24);
2.2 基本数据类型的分类
主要包含四大类8种
* 整数型
* byte 占一个字节 -128到127
* short 占两个字 -2^15~2^15-1
* int 占四个字节 -2^31~2^31-1
* long 占八个字节 -2^63~2^63-1
* 浮点型
* float 占四个字节 -3.403E38~3.403E38 单精度
* double 占八个字节-1.798E308~1.798E308 双精度
* 字符型
* char 占两个字节 0~65535
* 布尔型
* boolean 需要指出的是,java中boolean类型没有明确指定其大小
2.3 数据类型的转换
数据类型的转换包括两种,①隐式转换和②强制转换。
*隐式转换下,取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算。
举个例子:
int a = 13;
byte b = 56;
a = a + b;//这里b会被提升为int型,再同a相加
注意,进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的:byte,short,char → int → long → float → double
*强制转换,与C语言中的类型转换方法类似。
三、 运算符
1.逻辑运算符的辨别
* 与 &,&&:&&具有短路效果,左边为false,则右边不再执行。&则都会执行。
* 或 |,||:||具有短路效果,左边为true,则右边不再执行。|则都会执行。
* 异或 ^
* 非 !
2. 位异或运算符的特点
* 位异或运算符^有一个重要特点,一个数据对另一个数据位异或两次,该数本身不变。那么问题来了:“请自己实现两个整数变量的交换”,方法如下:
/*要求:交换a和b*/
int a = 56;
int b = 12;
/*方法1*/
int tmp = a;
a = b;
b = tmp;
/*方法2*/
a = a + b;
b = a - b;
a = a - b;
/*方法3*/
a = a ^ b;
b = a ^ b;
a = a ^ b;
四、基本语句
4.1 实现键盘录入
import java.util.Scanner;
public class HelloWorld{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();//获取整数
String str = sc.nextLine();//获取字符串
}
}
4.2 if,for,while,do...while语句
*与C相同。
4.3 switch语句
*与C非常类似:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
break;
}
*需要特别注意的是,作为表达式,基本数据类型可以接收byte,short,char,int等整形(不可浮点型);引用数据类型可以接收枚举enum(自JDK1.5)以及String(自JDK1.7)。
五、方法(method)
5.1 与C++中的函数类似,但是有几点不同:
*①java的方法名前面除了返回值类型以外还有修饰符,如public,private,staitc等;
*②java的参数传递只有一种,即值传递。也就是说实参直接把其“值”付给了方法内的形参,无论形参的值如何变化,都与实参无关。这也就意味着一般情况下,我们无法在方法内对基本数据类型实参进行修改。而C++中还有指针传递、引用传递等,这两种传递方法可以实现在方法内对实参值的修改。(当然,凡事无绝对,我们可以org.omg.CORBA包中定义的持有者(holder)来实现对于基本数据类型的修改,见下例)
import org.omg.CORBA.IntHolder;
public class HelloWorld {
public static void trip(IntHolder i)
{
i.value = i.value + 3;
}
public static void main(String[] args) {
int a = 89;
IntHolder aHolder = new IntHolder();
aHolder.value= a;
trip(aHolder);
a = aHolder.value;
System.out.println(a);
}
}
5.2 方法重载
*发生方法重载的条件:在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
*那么什么情况算是参数列表不同呢?①参数数量不同;②参数类型不同;③参数顺序不同。