pArr[2]=10 ; //pArr[2]== *(pArr+2) ==*(a+2) ==a[2]
它存放的是一维数组第一个元素的地址
下标和指针的关系:如果p是个指针变量,则p[i]永远等价于*(p+i)
确定一个一维数组需要两个参数:①数组的第一个元素的地址 ②数组的长度
/* 如果p是个指针变量,并且p存放了普通变量i的地址,则p指向了普通变量i
*p就是以p的内容为地址的变量
*/
j=*p; //等价于 j=i;
printf("i=%d,j=%d\n,i,j");
附注:*的含义
1.乘法
2.定义指针变量//定义了一个名字叫p的变量,int*表示p只能存放int变量的地址
3.指针运算符
该运算符放在已经定义好的指针变量的前面,如果p是一个已经定义好的指针变量,则*p表示以p的内容为地址的变量
基本类型指针【重点】
int *p; //p是变量的名字,int * 表示p变量存放的是int类型变量的地址
//int *p;不表示定义了一个名字叫做*p的变量
//int *p;应该这样理解:p是变量名,p变量的数据类型是int *类型
//所谓int *类型 ,实际就是存放int变量地址的类型
int i=3;
int j;
p=&i;
/* 1.p保存了i的地址,因此p指向i
2.p不是i,i也不是p,更准确的说:修改p的值不影响i的值,
3.如果一个指针变量指向了某个普通变量,则 *指针变量 就完全等同于 普通变量
*/
例子:
如果p是个指针变量,并且p存放了普通变量i的地址,则p指向了普通变量i。*p就完全等同于i
或者说:在所有出现*p的地方都可以替换成i,在所有出现i的地方都可以替换成*p
Person p3=p1;//将p1变量保存的对象地址赋给p3,导致p1和p3指向了堆空间中的同一个对象实体。
在这里可以将p3当作p1的小名,两个指向的是同一个东西
p3和p1画等号了,p1的地址给了p3,相当于p1p3为一个人
p3想当于p1创建了一个快捷图标
//调用属性:“对象.方法”
p1.name=“TOM”;
P1.isMale=true;
system.out.println(p1.name);
//调用方法:“对象.方法”
p1.eat();
p1.sleep();
p1.talk(“Chinese”);
方法的分类:按照是否有形参及返回值
无返回值 | 有返回值 | |
无形参 | void方法名(){} | 返回值的类型 方法名(){} |
有形参 | void方法名(形参列表){} | 返回值的类型 方法名(形参列表){} |
方法的声明:权限修饰符 返回值类型 方法名(形参列表){
方法体
}
public class CustomerTest {
}
如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量
如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不使用return,但是,如果使用话,只能“return”;表示结束此方法的意思。、
java4种权限修饰符:public、private、缺省、protect
这个return我刚学,但是我觉得很有必要,因为可以结束方法。
方法的重载(overlaod)loading...
1.定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
“两同一不同”:同一个类、相同方法名
参数列表不同:参数的个数不同,参数类型不同
2.举例:Arrays类中重载的sort() /binarySearch()
3.判断是否是重载:跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
public class OverLoadTest{
//如下的4个方法构成了重载
public void getSum(int i,int j){
System.out.println(i+j);
}
public void getSum(double d1,double d2){
}
public void getSum(string s,int i){
}
public void getSum(int i,String s){
}
}
方法的形参的传递机制:值传递
1.形参:方法定义时,声明的小括号内的参数
实参:方法调用时,实际传递给形参的数据
2.值传递机制:
递归方法的使用:
1.递归方法:一个方法体内调用它自身。
2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。递归一定要向已知方向递归。否则这种递归就变成了无穷递归,类似于死循环。
//提供关于属性age的get和set方法
public int getAge(){
return age;
}
public void setAge(int a){
age =a;
}
this可以理解为当前的对象
把.看做“的”真的好理解多了 //this.age
补充:同一个包下,不能命名同名的接口、类
不同的包下,可以命名同名的接口、类
import关键字的使用:
import:导入
1.在源文件中显示的使用import结构导入指定包下的类、接口
2.声明在包的声明和类的声明之间
3.如果需要导入多个结构,则并列写出即可
4.可以使用“xxx.*”方式表明可以调用xxx包下的所有结构