人生是一场单程的旅行,即使有些遗憾,我们也没有从头再来的机会,与其纠结无法改变的过
去,不如微笑着面对未来,因为生活,没有如果
目录
前言
Java的基础知识,该篇主要讲述变量与方法的特性
一、标识符
1.标识符:凡是自己可以起名字的地方都叫标识符。
比如:类名,变量名,方法名,接口名,包名,.标识符命名规则:
>由26个英文字母大小写,0-9,_$组成
>数字不能开头
>不可以使用关键字和保留字
>Java严格区分大小写,长度无限制
>标识符不能包含空格
3.基本数据类型转换
1.自动类型提升
byte 1 char2 short2 --> int4 --> long8 --> float4 --> double8 特别的:当char ,byte,short ,这三种之间做运算时,包括同类型之间的运算,结果是int类型
容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据类型
容量大小表示数据的范围,比如 float 的容量大于long的数据类型
2.强制类型转换
4.数字进制
1.二进制:0b
2.八进制:0
3.十进制:
4.十六进制:0x
原码 除符号位外 取反 --> 反码 加一 -->补码
5.运算符
1.算数运算符
2.移位运算
3.比较运算符
4.位运算符
5.逻辑运算符
6.赋值运算符
6.执行结构
循环结构
for (1;2;4){
3
}
1-2-3-4-2-3-4-2
1
while(2){
3
}
7.构造器的作用
创建对象
初始化对象结构
二、变量与方法
(一)属性(成员变量)与局部变量的
1.相同点
1.1定义变量的格式:数据类型 变量名 = 变量值
1.2先声明后使用
1.3变量都有其对应的作用域
2.不同点
2.1在类中声明的位置不同
属性:直接定义在类的一对{}内
局部变量:声明在方法内,方法形参,代码块内,构造器形参,构造器内部的变量
2.2关于权限修饰符的不同
属性:可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符 :private public 缺省 protected ----》封装性
局部变量:不可以使用权限修饰符
2.3默认初始话值的情况
属性: 类的属性,根据其类型,都有默认初始话值。
局部变量:没有默认初始化值
意味着在调用之前一定要显示赋值
特别的形参需要在调用的时候赋值
2.4在内存中加载的位置
属性:加载到堆空间中
局部变量:加载到栈中
3.属性(成员变量)赋值
1.默认初始化
2.显示初始化/3.代码块赋值
4.构造器初始化
5.有了对象后调用赋值
(二)成员方法
类中方法的声明和使用
方法:描述类应该具有的功能
方法声明:权限修饰符 返回值类型 方法名(形参列表){
}
说明: 权限修饰符: private public 缺省 protected
返回值类型:有返回值vs无返回值
有返回值 一定要有返回值 return
无返回值 不要返回值,return 结束该方法的作用
方法使用:可以使用当前类中的方法,也可以递归使用方法,方法中不可以定义方法
方法的重载
同一个类 方法同名但是参数列表不同,参数个数不同,参数类型不同
可变形参的方法
具体使用
1.可变个数形参的格式,数据类型 ... 变量名
2.当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个。。。
3.可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
4.可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存
5.可变个数形参在方法的形参中必须声明在末尾。
6.可变个数形参在方法的形参中,最多只能声明一个可变形参
递归方法
1.递归方法:一个方法体内调用它自身
2.方法递归包含了一种隐式的循环,他会重复执行某段代码但这后者那个重复执行无需循环控制、
递归一定要向已经知道的方向递归,否则这种递归变成无穷递归,类似与死循环
public class Recure{
public int getSum(int n){
if (n == 1){
return 1;
else{
return n+getSum(n-1);
}
}
}
}
方法参数的值传递机制
1.变量赋值
如果变量是基本数据类型,此时赋值的是变量所保存的数据值
如果变量是引用数据类型,此时赋值的是变量所保存的数据地址值
2.值传递
形参,方法定义时,声明的小括号内的参数
实参,方法调用时,实际传递给形参的数据
3.值传递机制
如果参数时基本数据类型,此时实参赋予给形参的实参真实存储数据的值
如果参数时引用数据类型,此时实参赋予给形参的实参存储数据的地址值
public static void main(String[] args){
Data data = new Data();
data.m =10;
data.n =20
qqqq test = new qqqq();
test.swap(data);
System.out.prinln(""+ data.m +data.n);
}
public void swap(Data data){
int temp =data.m;
data.m = data.n;
data.n = temp; }
此时该方法可以成功交换数据,因为引用数据类型赋值指向同一个地址值,地址值相同就会指向同一个堆空间里面的对象,
所以值可以成功交换,但是如果时数据变量,只是传递了数据,即使交换了但是原变量时不会变的
自悟:基本数据类型在栈中只是数据,引用数据类型在栈中是地址值