1 变量
1.1 概念
可以改变的数,称为变量。在Java语言中,所有的变量在使用前必须声明。
一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。如:int a = 3 ;
变量的使用原则:就近原则,即尽量控制变量的使用范围到最小
1.2 局部变量
位置:定义在方法里或者局部代码块中
注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5;
作用域:也就是方法里或者局部代码块中,方法运行完内存就释放了
1.3 成员变量
位置:定义在类里方法外
注意:不用初始化,也会自动被初始化成默认值
作用域:整个类中,类消失了,变量才会释放
1.4 变量的默认值测试
package practice;
/**
* 本类用于测试各种类型的变量默认值
* @author Administrator
*
*/
public class testVariabal {
static String name; //不加static无法使用,String不是静态的,需要将其转为静态的,后面会讲解具体原因
static byte a;
static short b ;
static int c;
static long d;
static float e;
static double f;
static char g;
static boolean h;
public static void main(String[] args) {
//由于main()方法是static静态修饰的,所以main()想要使用的这样代码,也必须是静态的
System.out.println(name); //结果为null
System.out.println(a); //结果为0
System.out.println(b); //结果为0
System.out.println(c); //结果为0
System.out.println(d); //结果为0
System.out.println(e); //结果为0.0
System.out.println(f); //结果为0.0
System.out.println(g); //结果为
System.out.println(h); //结果为false
}
}
整型数据的默认值为0
浮点型数据的默认值为0.0
布尔类型的默认值为false
字符型类型的默认值为\u0000,在eclipse中是一个空格
引用类型[除8大类型以外的类型]默认值是null
要注意局部变量是定义在方法里的变量,它只能在所在的大括号里使用;
成员变量是定义在最大的括号中的变量,在此括号中,均可以使用其变量;
2 成员变量与局部变量的入门案例
package practice;
/**
* 本类用于成员变量与局部变量的入门案例
* @author Administrator
*
*/
public class testVariabal2 {
//创建程序的入口函数main方法
/**
* 成员变量
* 1.位置:在类class里,main方法外;
* 2.注意事项:成员变量有自己的对应类型的默认值,不需要手动初始化赋值;
* 3.生效范围:在整个类中都可以生效,类消失,成员变量才会随着消失;
*/
static int count; //成员变量必须用static修饰,不修饰会报错;
public static void main(String[] args) {
//定义局部变量
/**
* 局部变量:
* 1.位置:在方法里/局部代码块里
* 2.注意事项:使用时必须赋值,初始化
* 3.生效范围:在方法里/局部代码块里,对应的代码执行完毕,局部变量也随之释放
*/
// int sum; The local variable sum may not have been initialized 定义变量不赋值的话,会报错,显示没有初始化值
int sum = 1;
System.out.println(sum);
System.out.println(count);
}
}
成员变量
1.位置:在类class里,main方法外;
2.注意事项:成员变量有自己的对应类型的默认值,不需要手动初始化赋值;
3.生效范围:在整个类中都可以生效,类消失,成员变量才会随着消失;
成员变量定义时,也可以赋值,只是不赋值也会输出默认值使用;
局部变量:
1.位置:在方法里/局部代码块里
2.注意事项:使用时必须赋值,初始化
3.生效范围:在方法里/局部代码块里,对应的代码执行完毕,局部变量也随之释放
局部变量必须赋值,不赋值初始化,不能使用;
2 方法
2.1 概述
被命名的代码块,方法可以含参数可以不含参数,可以提高代码的复用性;比如main方法,println方法等。
方法只是一个功能, 将其方法代码编写好后,之后每次使用只需调用其方法就可以了。
2.2 方法定义的格式
2.3 方法调用顺序图
顺序执行代码,调用指定方法,执行完毕,返回调用位置
package practice;
public class testMethod {
//创建程序的入口函数main方法
public static void main(String[] args) {
System.out.println(1);//打印1
//我们通过方法名+参数列表来确定要调用哪个方法
method1(); //输入此方法后由于未创建会报错,鼠标停留报错红线出,点击最下方的Creat method method1即可创建方法
System.out.println(2); //打印2
method2(3); //括号中给到方法参数
method3(2,5); //直接定义方法给到参数后,会报错,点击报错信息中的红点,会自动生成方法定义语句
}
private static void method3(int i, int j) {//自动生成的方法定义语句,此时已可以使用,输出其结果即可
System.out.println(i*j);
}
/**本方法用于测试方法的参数*/
private static void method2(int n) {//定义在方法的小括号中,为局部变量,需要赋值,在上面括号中给到方法参数
System.out.println("海绵宝宝今年"+n+"岁了");
}
/**1.method1()用于测试方法的调用顺序
* 方法定义的格式:
* 修饰符 返回值类型 方法名(参数列表){方法体}
*/
private static void method1() {
System.out.println(4);
System.out.println(5);
System.out.println(6); //定义method功能为打印4,5,6;
}
}
方法创建调用顺序就是此程序执行操作流程;
一个方法有没有执行取决于有没有调用
2.4 练习:方法4,打印张三今晚要吃2.7碗大米饭
package practice;
/**
* 创建方法4,打印张三今晚要吃2.7碗大米饭
* @author Administrator
*
*/
public class testMethod2 {
public static void main(String[] args) {
method4("张三",2.7);
}
private static void method4(String string, double d) {
System.out.println(string+"今晚要吃"+d+"大米饭");
}
}
2.4 方法的重载
方法的重载是指在一个类中定义多个同名的方法,但是每个方法的参数列表不同(也就是指参数的个数和类型不同),程序在调用方法时,可以通过传递给他们的不同个数和类型的参数来决定具体调用哪个方法.
2.5 测试方法的重载
package cn.method;
/**本类用于测试方法的重载*/
public class TestMethodOverload {
public static void main(String[] args) {
/**1.我们根据方法名+参数列表确定具体调用哪个方法*/
/**2.方法的重载:
* 在同一个类中,存在方法名相同,但参数列表不同的方法
* 如果在同类中,同名方法的参数个数不同,一定构成重载
* 如果在同类中,同名方法的参数个数相同,
* 需要查看对应位置上参数的类型,而不是参数名,与参数名无关
* (int a,String b)与(int b,String a)--不构成重载
* (int a,String b)与(String a,int b)--构成重载
* */
//2.调用method()
method();
//4.调用method(int)
method(666);
//6.调用method(int,String)
method(888,"泡泡");
}
//1.创建一个无参的method()
public static void method() {
System.out.println("哈哈哈哈我没参数");
}
//3.创建一个method(int n)
public static void method(int n) {
System.out.println("哈哈哈哈我的参数是:"+n);
}
//5.创建一个method(int n,String s)
public static void method(int a,String b) {
System.out.println(b+"今晚要干他"+a+"碗大米饭");
}
public static void method(String a,int b) {
System.out.println(b+"今晚要干他"+a+"碗大米饭");
}
}
2.6 成员变量与局部变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类里方法外 | 方法里或方法声明上 |
生命周期不同 | 随着对象的存在而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值不同 | 有默认的对应类型的默认值 | 没有默认值,必须手动初始化 |
3 while语句
3.1 形式(先判断,再执行)
while( 执行条件 ){
循环体
}
3.2 练习:猜数字
package practice;
import java.util.Random;
import java.util.Scanner;
/**
* 本类用于练习while循环
* @author Administrator
*
*/
public class demo {
public static void main(String[] args) {
int r = createNum();//调用可以生成随机数的方法,并且接收生成的随机数
System.out.println("打个小抄:"+r);
//调用猜数字方法1--while
guessNum(r);
}
//创建猜数字的方法
public static void guessNum(int r) {
//1.写一个死循环
while(true) {//死循环--需要设置程序的出口
//2.接收用户输入的值
System.out.println("猜猜看~");
int input = new Scanner(System.in).nextInt();
//3.判断是否猜对(拿用户猜的数字与生成的随机数做比较)
if(input > r) {
System.out.println("猜大了,继续猜猜看");
}else if(input < r) {
System.out.println("猜小了,继续努力");
}else if(input == r) {
System.out.println("猜对了!");
//一定注意:要设置程序出口!!!
break;
}
}
}
//创建一个用来生成随机数的方法
public static int createNum() {
//让程序产生一个随机数
//java.util.Random,注意导包,快捷键:Ctrl+Shift+O
int random = new Random().nextInt(100);//参数100是自定义的,此时生成的随机数范围是[0,100)的整数
return random;
}
}