变量:
(1) 根据数据类型分类:
1. 基本数据类型变量 2. 引用数据类型变量
(2) 根据变量的位置分类:
1. 局部变量 2. 全局变量(也叫成员变量)
局部变量举例:
(1) 定义在方法中的变量
下面代码 ,第二行会报错 age cannot be resolved to a variable意思是: age不能被解析成一个变量
分析:age定义在main方法中,所以是局部变量,而局部变量的作用域是:变量定义之后,方法结束之前-》所以输出age语句在age定义之前会报错,只能在定义之后引用
//1 public static void main(String[] args) {
//2 System.out.println(age);
//3 int age = 10;
//4 System.out.println(age);
}
下面代码,在myFuction()方法中引用age,也会报错
public static void main(String[] args) {
int age = 10;
}
public void myFuction() {
//age定义在main方法中是局部变量,只能作用在main方法体中
//main方法体之外是不能被引用的
System.out.println(age);//此处会报错
}
(2) 定义在代码块中 的变量
一对花括号括起来的就是代码块
代码块中定义的变量作用范围: 定义之后,代码块结束之前
如下代码,在代码块之外输出age2语句会报错,因为age2只能作用在代码块中
{
int age2 = 20;
}
System.out.println(age2);
(3) 方法的形式参数变量
作用域: 整个方法内
如下面main方法上的变量args,在方法体中输出此变量,代码不会报错,可以引用
public static void main(String[] args) {
System.out.println(args);
}
总结:
image.png image.png(1)局部变量要初始化
上图总结中提到,方法内和代码块中定义的局部变量,在使用之前,必须要初始化。举例如下:
在main方法中定义一个局部变量但未初始化,所以下图会有黄色波浪线警告-》 The value of the local variable a is not used意思是变量不能被使用
image.png
如果必须要使用,如下图,会报错-》The local variable a may not have been initialized意思是未初始化
image.png上图点击蓝色字体 Initialize variable 会自动初始化a,默认为0
public static void main(String[] args) {
int a = 0 ;
System.out.println(a);
}
(2)局部变量不能添加修饰符
如下图给局部变量a加 public 会报错
image.png
全局变量
全局变量是在类范围内定义的变量,也称为成员变量,或类属性
全局变量特点:
-
可以有修饰符,也可以没有修饰符
public ,protected,默认修饰符,private -
定义在函数外部
-
作于域为整个类
-
可以不用初始化,也可以初始化,如果没有初始化,则默认该数据类型的默认值
(1)静态的全局变量
静态方法只能引用静态变量,使用普通全局变量会报错
public class Var {
static int a;//静态全局变量也叫静态成员属性
public static void main(String[] args) {// 类级别的静态方法
System.out.println(a);// 没有初始化,默认输出为0
}
}
(2)普通全局变量
public class Var {
public int b;//普通的全局变量也叫对象成员属性,对象属性
int a;//普通全局变量
public void myFuction() {//对象方法也叫实例方法
System.out.println(b);
}
}
函数(也叫方法)
函数:完成功能或者解决某个问题的代码块,是可以重复调用的
语法:
函数分类:(1)普通方法: 包括静态(static)方法和实例方法(或者叫对象方法)(2)构造方法
修饰符 函数返回值类型 函数名(参数类型 参数名......){
函数体......
}
修饰符: public->所有地方都可以引用(本类,子类,不同包,同包都可以引用)
private->只能本类中使用
返回值类型:可以是基本类型( int ,boolean .......)也可以是引用数据类型(String.....)
函数名:小驼峰命名->第一个单词首字母小写)
参数: 完成功能需要用到的数据
参数类型:可以是基本数据类型也可以是引用数据类型
具体语法解释见下图:
image.png
需求:完成2个整数的加法运算
第一步:定义一个功能方法
public int sum(int a, int b) {
int add = a + b;
return add;
}
第二步:函数(方法)调用
- 静态方法调用非静态方法-》这种是不允许的,编译会报错
public static int sum(int a, int b) {
sayHello();//静态方法调用非静态方法,会报错
int add = a + b;
return add;
}
public void sayHello() {
System.out.println("hello");
}
解决办法:
- sayHello()加静态属性-》静态调用静态:类名.方法名()
(注意:类名也可以不用加) - 不加静态属性,通过创建对象来调用
语法:
//创建对象
//通过new 调用类的构造方法 -》即类名 ()来创建对象实例
类名 实例名=new 类名();
// 调用对象方法(或实例方法)
变量名.方法名();
2.非静态方法可以调用静态方法: 类名.方法名()
public int sum(int a, int b) {
Var.sayHello();//非静态方法调用静态方法
int add = a + b;
return add;
}
public static void sayHello() {
System.out.println("hello");
}
3.非静态方法可以相互调用,不需要创建对象: 方法名()
public int sum(int a, int b) {
sayHello();
int add = a + b;
return add;
}
public void sayHello() {
System.out.println("hello");
}
函数调用注意事项
image.png面向对象事例解释
(1)创建一个鹦鹉类
public class Parrort {
public String color;// 蓝色,绿色,红色.....
public String type;// 类型:金刚鹦鹉,虎皮鹦鹉
public int age;
/**
* 行为:学舌,说话,吃饭,睡觉-》程序里体现的是功能
*
* @param content
*/
public void say(String content) {
System.out.println(content);
}
}
(2)创建一个测试类
public class test{
public static void main(String[] args) {
//调用构造方法创建对象
Parrort p = new Parrort();
//对象属性赋值
p.color="红色";
p.type="金刚鹦鹉";
p.age=1;
//方法调用
p.say("hello");
}
}
网友评论