成员变量
1、成员变量的分类
实例变量:没有static修饰,也叫对象属性(实例变量),属于某个对象的,通过对象来使用
类变量:有static修饰,也叫类变量,属于整个类的,不是属于某个实例
2、如何声明成员变量?
【修饰符】 class 类名{【修饰符】 数据类型 属性名; //属性有默认值【修饰符】 数据类型 属性名 = 值; //属性有初始值
}
说明:属性的类型可以是Java的任意类型,包括基本数据类型、引用数据类型(类、接口、数组等)
例如:声明一个中国人的类
class Chinese{static String country;String name;char gender = '男';//显式赋值
}
3、如何在类外面访问成员变量?
(1)类变量
类名.静态成员变量 //推荐对象名.静态成员变量 //不推荐
(2)实例变量
对象名.静态成员变量 //只能使用这种方式
4、成员变量的特点
类变量的值是所有对象共享的,而实例变量的值是每个对象独立的
public class TestChinese {public static void main(String[] args) {Chinese c1 = new Chinese();Chinese c2 = new Chinese();c1.name = "张三";c2.name = "李四";c2.gender = '女';// c1.country = "中国";Chinese.country = "中国";//推荐System.out.println("c1.country = " + c1.country + ",c1.name = " + c1.name + ",c1.gender = " + c1.gender);System.out.println("c2.country = " + c2.country + ",c2.name = " + c2.name + ",c2.gender = " + c2.gender);}
}
class Chinese{static String country;String name;char gender = '男';
}
```java
class MyDate{int year;int month;int day;
}
class Employee{String name;MyDate birthday;
}
class Test09FieldExer3{public static void main(String[] args){//创建两个员工对象Employee e1 = new Employee();Employee e2 = new Employee();//为两个员工对象的成员变量赋值e1.name = "张三";e1.birthday = new MyDate();e2.name = "李四";e2.birthday = new MyDate();e1.birthday.year = 2000;e1.birthday.month = 1;e1.birthday.day = 1;e2.birthday.year = 2000;e2.birthday.month = 3;e2.birthday.day = 8;System.out.println("第一个员工,姓名:" + e1.name +",生日:" + e1.birthday.year + "年" + e1.birthday.month + "月" + e1.birthday.day + "日");System.out.println("第二个员工,姓名:" + e2.name +",生日:" + e2.birthday.year + "年" + e2.birthday.month + "月" + e2.birthday.day + "日");}
}
总结
类变量和实例变量的区别
一是没有static修饰的,这些成员变量是对象中的成员,称为实例变量。
二是有static修饰的,称为类变量(静态变量)。
成员方法
如何声明方法
1、方法声明的位置必须在类中方法外
2、语法格式
【修饰符】 返回值类型 方法名(【参数列表:参数类型1 参数名1,参数类型2 参数名, ...... 】){方法体;【return 返回值;】
}
- 修饰符: 修饰符后面一一介绍,例如:public,static等都是修饰符
- 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
- 基本数据类型
- 引用数据类型
- 无返回值类型:void
- 方法名:给方法起一个名字,见名知意,能准确代表该方法功能的名字
- 参数列表:方法内部需要用到其他方法中的数据,需要通过参数传递的形式将数据传递过来,可以是基本数据类型、引用数据类型、也可以没有参数,什么都不写
- 方法体:特定功能代码
- return:结束方法,并将方法的结果返回去,
- 如果返回值类型不是void,方法体中必须保证一定有return 返回值;语句,并且要求该返回值结果的类型与声明的返回值类型一致或兼容。
- 如果返回值类型为void时,return 后面不用跟返回值,甚至也可以没有return语句。
- return语句后面就不能再写其他代码了,否则会报错:Unreachable code
声明位置示例:
如何在其他类中调用方法
(1)实例方法
对象名.实例方法(【实参列表】) //必须通过对象来访问
示例代码:
public class TestCircle {public static void main(String[] args) {Circle c1 = new Circle();c1.radius = 1.2;System.out.println("c1的面积:" + c1.area());//非静态方法只能通过"对象."进行访问
// System.out.println("c1的面积:" + Circle.area());Circle c2 = new Circle();c2.radius = 2.5;System.out.println("c2的面积:" + c2.area());}
}
class Circle{double radius;public double area() {return Math.PI * radius * radius;}
}
(2)类方法
类名.类方法(【实参列表】) //推荐对象名.类方法(【实参列表】) //不推荐
public class TestCount {public static void main(String[] args) {System.out.println(CountTools.max(4, 1));//静态方法也可以通过“对象.”访问,就是麻烦点CountTools c = new CountTools();System.out.println(c.max(2, 5));}
}
class CountTools{static int max(int a, int b) {return a > b ? a : b;}
}
(3)总结
- 形参:在定义方法时方法名后面括号中声明的变量称为形式参数(简称形参)即形参出现在方法定义时。
- 实参:调用方法时方法名后面括号中的使用的值/变量/表达式称为实际参数(简称实参)即实参出现在方法调用时。
总结:
(1)调用时,需要传“实参”,实参的个数、类型、顺序顺序要与形参列表一一对应
如果方法没有形参,就不需要也不能传实参。
(2)调用时,如果方法有返回值,可以接受或处理返回值结果,当然也可以不接收,那么此时返回值就丢失了。
如果方法的返回值类型是void,不需要也不能接收和处理返回值结果。
静态方法和非静态方法的区别
1.静态方法 只能调用静态的方法和静态的属性 不能【直接】引用非静态的资源(属性 方法)2.非静态的方法 不仅可以调用非静态的方法和属性 也可以调用静态的方法 和属性why:因为静态修饰的资源围着类的加载而加载 非静态资源需要借助对象去调用当 静态资源准备完毕后 对象可能还没有产生