Java 基础
一、命名规则和规范:(规则必须严格遵守;规范是约定是良好的习惯)
a) 变量命名:
注*数字,字母,下划线,$符号组成 开头不能有数字
i. 规则:以字母、下划线”_”、”$” 开头,后可包括字母、数字、_、$,不能包含其他特殊字符,不能使用JAVA关键字(int float double boolean class public private import String Array new …)。
ii.规范:第一个单词首字母小写,其后单词首字母要大写,其他均为小写。(userName).
b) 方法命名:
i. 规则与变量命名相同,方法中的参数命名与变量命名相同 (getStuInfoById())
ii. 规范与变量相同
c) 类命名:
i. 规则:以字母、下划线”_”、”$” 开头,后可包括字母、数字、_、$,不能包含其他特殊字符,不能使用JAVA关键字。
ii. 规范:第一个单词首字母大写,其后单词首字母要大写,其他均为小写。
d) 包命名
i. 规则:不能以”.”开头和结束 a.b.c
ii. 规范:以小写字母组成
二、基本数据类型/类型转换
a) 基本类型:int double float char boolean
b) 变量声明 / 赋值:
数据类型 变量名 [ = 初值 ];
int a = 10;
int b;
b = 100;
c) 类型自动转换
条件:两种类型兼容,如int double float char
目标类型大于源类型,如 doubleßfloatßintßchar
d) 强制类型转换
(新类型) 变量或表达式
int a =100;
double b=a; //自动转换
int c;
c=(int) b; //强制转换
字符编码:
注*: ‘a’à97、 ‘A’à65、 ‘1’à49
i++与++i的故事:
int i = 1; int i = 1;
System.out.println(i++); System.out.println(++i);
System.out.println(i); System.out.println(i);
结果:1,2 结果: 2,2
== 和 equals 的区别:
1、基本数据类型比较 ==和Equals都比较两个值是否相等。相等为true 否则为false; 2、引用对象比较 ==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;
New 等于开辟了一个新的空间保存值:
String str1 = "Jack"; String str1 = "Jack";
String str2 = "Jack"; String str2 = new String("Jack");
if(str1 == str2){ if(str1 == str2){
System.out.println("OK"); System.out.println("OK");
}else{ }else{
System.out.println("No Ok"); System.out.println("No Ok");
} }
输出:Ok 输出:No OK
String str1 = "Jack";
String str2 = "Mike";
str2 = str1;
if(str1 == str2){
System.out.println("OK");
}else{
System.out.println("No Ok");
}
输出:Ok
三、运算符:结果为真(true) 或 假(false)
a) 关系运算符:比较两个表达式
> < >= <= == !=
b) 逻辑运算符:连接多个条件
&& 与/并且 当两个条件同时为真时,结果为真;否则为假
|| 或/或者 当两个条件任意一个为真时,结果为真;两个同时为假时结果为假
! 非/取反 条件为真,结果为假;条件为假,结果为真
四、条件语句:根据不同的条件执行不同的操作
a) if 语句格式 分成以下三种:
if(表达式){ if(表达式){ if(表达式){
} }else{ }else if(表达式){
} }else{
}
b) switch 语句格式 int char enum 可以不加break(从满足条件的case开始运行,一直到碰到break,或者switch结构结束) -----一般做等值判断 Struct
switch (表达式){
case 值1:
语句集1;
[break;]
default:
语句集n;
[break;]
}
五、循环语句:重复连续执行相同的操作
a) 格式:
1.先判断条件,再执行循环体(循环体执行次数0--n)适用于循环次数不确定的情况
while(条件){
循环体:
}
2. 先执行循环体,后判断条件(循环体执行次数1--n)适用于循环次数不确定的情况
do{
循环体:
}while(条件)
3. 适用于循环次数确定的情况
for(循环变量初始化;条件;循环变量增值){
循环体;
}
b) 循环跳转语句
break;退出循环,继续执行循环外的语句;
continue;结束本次循环,继续下次循环;
c) 注意事项:
i. 确保循环的有限性(不要出现死循环):
在while 或 do…while 循环中,要有改变循环条件结果语句或退出循环的语句。
在for循环中,要注意循环条件与循环变量改变的协调性
ii. 在循环体中声明的变量(包括在for中声明的循环变量)只能在循环中使用,循环体外不能使用。
六、 类和对象
什么是类: 类是一个模板,规定了对象必须要有的属性和方法 抽象
对象:特指某一个存在实体
a) 概念:
i. 类:具有相同特征和行为的一组对象的集合。是创建此类实体的模板,是一种数据类型。
ii. 对象:根据类创建出来的实实在在的实体(看的见/摸的着),是一个对象变量。
b) 类格式
public class 类名{
//定义属性
类型 属性1;
类型 属性2;
。。。。。。
//定义方法
public 返回类型 方法名(参数类型 参数1,参数类型 参数2,…){
方法体;
[return 表达式;]
。。。。。。
}
。。。。。。//其他方法定义
}
c) 使用类创建对象:为更好地理解,建议在其他类(测试类)中创建该类对象
d) 注意:
Student st; //该对象st未实例化,不能直接使用,在适用前要执行:
st = new Student();
----以上代码等同于
Student st = new Student();
-------------------------------------------
所有属性和方法都是通过对象名引用的:(不包含静态方法和静态属性)
对象名.属性 = 值;
对象名.方法(参数);
--------------------------------------------------
在调用方法时,要按参数的个数及顺序
七、 数组:具有相同数据类型、相同变量名的一组数据
a) 声明及初始化,注意只有在声明时才能对整个数组初始化
int[] a = {1,2,3,4}; //java[]可以在类型或者标识后面
int[] a = new int[]{1,2,3,4}; //不需要在括号中写长度
int[] a = new int[4];
错误:int[] a = new int[4]{1,2,3,4};
int[] a = new int[];
int[] a = new int[4]; a={1,2,3,4}; //声明后的数组,只能逐一元素赋值
b) 使用数组
i. 数组通过下标引用各个元素,下标0---数组.length-1 (元素个数-1)
a[0] = 10; a[3] = 30;
ii. 数组的操作----循环
赋值:
int[] a = new int[4];
Scanner input = new Scanner(System.in);
for (int i=0; i<a.length; i++){
a[i] = input.nextInt();
}
显示
for (int i=0; i<a.length; i++){
System.out.println(a[i]);
}
求和
int sum = 0;
for (int i=0; i<a.length; i++){
sum = sum + a[i];
}
System.out.println(sum);
iii. 排序
Arrays.sort(a); //将数组a 按值大小升序排列 默认由小到大
iv. 对象数组(补充)
Student[] st = new Student[10]; //声明对象数组,但没有实例化
for (int i=0; i<st.length; i++){
st[i] = new Student(); //实例化数组元素
}
st[0].name = “张三”; //设置第一个元素的属性
st[0].addScore(10); //调用对象方法
注*:二维数组:
int[][] nums = new int[3][4];
//第二行第三列
//nums[1][2] = 1;
int num = nums[1][2];
八、 字符串
a) String
indexOf(“”):找到指定字符串在源字符串中有没有(第一次出现的位置),如果有就返回索引,没有就返回-1b) lastIndexOf:找到指定字符串在源字符串中有没有(最后一次出现的位置),如果有就返回索引,没有就返回-1
c) subString(int start,int end):从开始位置到结束位置之间的字符串
第一个从0开始,第二个从1开始,如果只有一个参数,就从此截取到最后
d) toUpperCase()—大写 toLowerCase()—小写
e) trim() 去除左右空格
f) 常用方法参见P295表2
g) StringBuffer:它是一个真正的引用类型 常用方法参见P340表3
重点说明基本类型和引用类型的区别:
基本类型(int,float,double,boolean…):直接存储值,如果你对其重新赋值,会开辟新的空间。如果你将其做为参数传递,传递的是它的副本,原始值不会改变。
引用类型(Array new 自定义的类):它里面存储的是对象的地址空间。如果做为参数传递,传递的是地址。原始值和目标值会一起变化。
String是引用类型,String有一个特点:值不可变,所以在重新赋值的时候会开辟新的空间。 往往这么认为:引用类型的定义方式,基本类型的操作方式(值不可变)