1.Java的方法:
a.定义
public static void main(String[] args) {
}
修饰符 返回值类型 方法名(形参类型1 变量名1,形参类型2 变量名2,.....){//形参可以一个没有
return 返回值;//它的类型跟返回值类型对应
//当返回值类型为void
//可以有return语句: return; 或者 不写
}
注意事项:
1.返回值类型可以为八大基本数据类型,引用数据类型,void
2.方法名:xxxxXXXXXXXX 首个单词小写,剩余单词首字母大写
b.使用:
使用格式: 方法名(实参值1,实参值2,...);//实参与方法的形参一一对应
public static void main(String[] args) {
//方法的调用
int i = getSum(10,20);//编译器根据方法的名称和形参的类型确定调用getSum(int,int)方法
//把10的值传给a,20的值传给b
System.out.println(i);
System.out.println(getSum(100,20));//如果方法有返回值可以直接调用方法打印
printJava();
System.out.println(printJava());//不能直接用输出语句打印
}
//求两个整数的和
public static int getSum(int a,int b) {
int sum = a+b;//sum=10+20->sum=30
printJava();//普通方法还可以调用其它方法
return sum;//将30返回到方法调用处
//printJava();//编译就报错,因为return下面的语句永远执行不到
}
public static void printJava(){
System.out.println("I love Java");
}
使用方法的优点:
提高了代码的复用性
c.如果类中方法的形式参数个数,类型,类型顺序不同三个条件满足至少一个就构成重载关系
与返回值类型无关
public static int getSum(int a,int b){
}
public static int getSum(int a,int b,int c){
}
public static int getSum(int a,double b){//③
}
public static int getSum(double a,int b){//④与③参数类型顺序不同
}
/*
//与返回值类型无关,编译会报错
public static int getSum(int a,double b){
}
public static void getSum(int a,double b){
}
*/
/*
//构成重载与变量名无关,编译会报错
public static int getSum(int a,double b){
}
public static int getSum(int c,double d){
}
*/
2.Java中的数组
a.定义:
1.动态初始化:'动'体现在,仅仅给数组指定长度,而不手动赋值
int[] arr=new int[3];//定义了一个长度为3的数组
//相当于定义了3个int类型变量
//arr[0],arr[1],arr[2]相当于3个int类型的变量
//数组中有默认值arr[0],arr[1],arr[2]三个元素的值都是0
2.静态初始化:'静'体现在,在定义的数组就手动给数组中的元素赋值
int[] arr={10,29,37};//定义一个长度为3的数组
//相当于定义了3个int类型变量
// arr[0],arr[1],arr[2]相当于3个int类型的变量
//arr[0]=10,arr[1]=29,arr[2]=37
b.使用:
int[] arr=new int[3];
int i=arr[2];//取出arr[2]的值0给了i
arr[2]=10;//将10的值赋值给arr[2]
arr.length;//length是数组的属性,不需要加()
//求字符串的长度使用length()方法
c.注意:
int[] arr=new int[]{1,23,23};
arr[100]=3;//编译时期仅检查语法错误,取元素的格式没有问题
//运行时期,去数组中查找根本没有100号索引元素
//ArrayIndexOutOfBoundsException 索引越界异常
arr=null;
arr.length;//编译时期仅检查语法错误,获取长度的格式没有问题
//arr根本没有指向任何数组对象,arr.length获取不到数组长度
//NullPointerException 空指针异常
//null只能赋值给引用类型变量,不能给基本数据类型
3.Java中的内存结构:
a.栈结构:局部变量
public static void method(int a){//形参a是方法的一个局部变量,作用域仅在method内部
//当method()方法执行完毕,a变量会被销毁
int c=2;//c也是一个局部变量,当method()方法执行完毕,c变量会被销毁
for (int i=0;i<10;i++) {//i仅能在for循环内部使用,i也是一个局部变量,for循环执行完毕,i就被销毁
}
}
b.堆结构:只要跟着new关键字的,都在堆中 (new int[3],new Scanner(System.in),...)
c.常量池
整数常量(1,2),小数常量(3.1415926),字符常量('A'),字符串常量("abc")....
4.成员变量:可以被所有的方法共享
class Demo{
static int x=3;//静态修饰的方法访问的成员变量也必须加static修饰
public static void method(){
int i=3;//i仅仅只能在method()中使用,是method()的局部变量
System.out.println(x);//3
}
public static void method2(){
System.out.println(x);//3
}
}
5.基本类型的值传递和引用数据类型的值传递
a.引用数据类型传递的是对象的地址值:例如:数组变量的传递,传递是数组的地址值
使main方法中和调用的方法操作的都是同一个数组对象
b.基本数据类型的值传递,仅传递变量的值,并且调用方法中变量值的改变
不影响main中的变量值
class Demo{
public static void main(String[] args) {
int[] arr=new int[3];
change(arr)
System.out.println(arr[2]);
int a = 10;
int b = 20;
change(a, b);
System.out.println("a:" + a + ",b:" + b);
}
public static void change(int[] arr){
arr[2]=3;
}
public static void change(int a, int b) {
a++;
b+=2;
}
}
|
|