局部变量和成员变量的区别:
*
- 1,定义的位置不一样【重点】
- 局部变量:在方法的内部
- 成员变量:在方法的外部,直接写在类当中
- 2,作用范围不一样【重点】
- 局部变量:只有方法当中才可以使用,出了方法就不能再用
- 成员变量:整个类全部可以通用
- 3,默认值不一样【重点】
- 局部变量:没有默认值,如果要想使用,必须手动进行赋值
- 成员变量:如果没有赋值,会有默认值,规则和数组一样。
- 4,内存的位置不一样。(了解)
- 局部变量:位于栈内存
- 成员变量:位于堆内存
- 5,生命周期不一样:(了解)
- 局部变量:随着方法进栈而诞生,随着方法出栈而消失。(通常情况存在时间短一下)
- 成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。(通常情况存在时间长一下)
public class Demo01VariableDifference {
String name;//成员变量
public void methodA(){
int num = 20;//局部变量
System.out.println(num);
System.out.println(name);
}
public void methodB(int param){//方法的参数就是局部变量
//参数在方法调用的时候,必然会被赋值的。
System.out.println(param);
int age;//局部变量
//System.out.println(age);// 错误写法,局部变量没有赋值是不能使用的,
// System.out.println(num);//错误写法
System.out.println(name);//可以 输出的时默认值(看第2点)
}
}
l 面向对象的三大特征:
-
封装,继承,多态
-
封装性:在java当中的体现:
-
1,方法就是一种封装
-
2,关键字privte也是一种封装。privte 意思是私有化
-
封装就是将一些细节信息隐藏起来,对于外界不可见。
-
`public class Demo01Method {
public static void main(String[]args){
/* int[] array = {5, 15, 25, 20, 100};int max = array[0]; for(int i = 1; i < array.length; i++){ if(array[i] > max){ max = array[i];` } } */ int[] array = {5, 15, 25, 20, 100}; int max = getMax(array); System.out.println("最大值:" + max); }
//给我一个数组,我换给你一个最大值
public static int getMax(int[] array){
int max = array[0];
for(int i = 1; i < array.length; i++){
if(array[i] > max){
max = array[i];
}
}
return max;
}
}
问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来。
- 解决方案:用private关键字将需要保护的成员变量进行修饰。
- 一旦使用private进行修饰,那么本来当中仍然可以访问。
- 但是!超出了本类范围之外就不能再直接访问了。
- 间接访问Private成员变量,就是定义一对儿Getter/Setter方法
- 必须叫setXxx或者是getXxx命名规则。
- 对于Getter来说,不能有参数,返回值类型和成员变量对应。
- 对于Setter来说,不能有返回值,参数类型和成员变量对应。
public class Person {
String name;//姓名
private int age;//年龄
public void show(){
System.out.println("我叫" + name + "年龄" + age);
}
//设置间接访问 age
//这个成员方法,专门用于向age设置数据
//返回值类型一定是void类型,名称必须叫set(set是设置的意思就是放的意思)Age(A首字母必须大写)
//再来个参数(int num);那么age就再赋值,就是获取类num的值。
public void setAge(int num){
if(num < 100 && num >= 9){
age = num;
}else{
System.out.println("数据不合理");
}
age = num;
}
//这个成员方法,专门获取age(往外拿的意思)的数据(就是往外拿)
public int getAge(){
return age;
}
}
package Demo;
public class Demo03Person {
public static void main(String[]args){
Person person = new Person();
person.show();
person.name = "赵丽颖";
//person.age = -20;//直接访问private内容,错误写法
person.setAge(20);
person.show();
}
}
对于基本类型当中的boolean值,Getter方法一定写成isXxx的形式,而getXxx规则不变
- */
public class Student {
private String name;//姓名
private int age;//年龄
private boolean male;//性别是不是男的
public void setMale(boolean b){//注意
male = b;
}
public boolean isMale(){//注意boolean
return male;
}
public void setName(String str){
name = str;
}
public String getName(){
return name;
}
public void setAge(int num){
age = num;
}
public int getAge(){
return age;
}
}
package Demo;
public class Demo04Student {
public static void main(String[]args){
Student stu = new Student();
stu.setName("鹿晗");
stu.setAge(20);
stu.setMale(true);
System.out.println("姓名" + stu.getName());
System.out.println("年龄" + stu.getAge());
System.out.println("是不是男生" + stu.isMale());//记得是isMale而不是getMale
}
}