------- android培训、java培训、期待与您交流! ----------
07.01 成员变量和局部变量的区别
1.在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上
2.在内存中的位置不同
成员变量 堆内存
局部变量 栈内存
3.生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4.初始化值不同
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
07.02 方法的形式参数是类名的调用
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //创建学生对象 6 Student s = new Student(); 7 StudentDemo sd = new StudentDemo(); 8 sd.method(s); 9 }10 }11 class StudentDemo12 {13 //形式参数是引用类型14 public void method(Student s)15 {16 s.show();17 }18 }19 class Student20 {21 public void show()22 {23 System.out.PRintln("学生爱学习");24 }25 }
07.03 匿名对象的概述和应用
匿名对象:就是没有名字的对象。是对象的一种简化表示形式
匿名对象的两种使用情况:
1.对象调用方法仅仅一次的时候
2.作为实际参数传递
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 //匿名对象调用方法 6 new Student().show(); 7 } 8 } 9 class Student10 {11 public void show()12 {13 System.out.println("学生爱学习");14 }15 }
匿名对象调用完毕就是垃圾,垃圾回收器会在适当的时间回收,提高内存的使用效率
07.04 封装的概述
封装概述:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
例:
1 class Student 2 { 3 String name; 4 //将age私有,只能在Student类中访问 5 private int age; 6 7 //提供对外访问的方法获取age的值 8 public int getAge() 9 {10 return age;11 }12 //提供对外访问的方法,并可以对传入的a的值进行判断,满足条件则赋值给age,不满足则不赋值13 public void setAge(int a)14 {15 age = a;16 }17 public void show()18 {19 System.out.println("姓名:"+name+" "+"年龄:"+age);20 }21 }
07.05 封装的好处和设计原则
封装好处:
1.隐藏实现细节,提供公共的访问方式
2.提高了代码的复用性
3.提高安全性
封装原则:将不需要对外提供的内容都隐藏起来。把属性隐藏,提供公共方法对其访问。
07.06 private关键字的概述和特点
private关键字:是一个权限修饰符。可以修饰成员(成员变量和成员方法),被private修饰的成员只在本类中才能访问。
private最常见的应用:
1.把成员变量用private修饰
2.提供对应的getXxx()/setXxx()方法
07.07 private的应用标准案例
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Student s = new Student(); 6 //给成员变量赋值 7 s.setName("小强"); 8 s.setAge(25); 9 10 System.out.println(s.getName()+":"+s.getAge());11 }12 }13 class Student14 {15 private String name;16 //将age私有,只能在Student类中访问17 private int age; 18 19 //提供对外访问的方法获取name的值20 public String getName()21 {22 return name;23 }24 //提供对外访问的方法设置name的值25 public void setName(String n)26 {27 name = n;28 }29 //提供对外访问的方法获取age的值30 public int getAge()31 {32 return age;33 }34 //提供对外访问的方法设置age的值35 public void setAge(int a)36 {37 age = a;38 }39 }
07.08 this关键字的概述和应用
this:代表所在类的对象引用
方法被哪个对象调用,this就代表那个对象
当局部变量隐藏成员变量时使用this
例:
1 class Student 2 { 3 private String name; 4 //将age私有,只能在Student类中访问 5 private int age; 6 7 //提供对外访问的方法获取name的值 8 public String getName() 9 {10 return name;11 }12 //提供对外访问的方法设置name的值13 public void setName(String name)14 {15 this.name = name;16 }17 //提供对外访问的方法获取age的值18 public int getAge()19 {20 return age;21 }22 //提供对外访问的方法设置age的值23 public void setAge(int age)24 {25 this.age = age;26 }27 }
07.09 this关键字的内存图解
07.10 标准的手机类代码及其测试
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Phone p = new Phone(); 6 System.out.println("品牌:"+p.getBrand()+" 价格:"+p.getPrice()+" 颜色:"+p.getColor()); 7 p.setBrand("小米"); 8 p.setPrice(1999); 9 p.setColor("白色");10 System.out.println("品牌:"+p.getBrand()+" 价格:"+p.getPrice()+" 颜色:"+p.getColor());11 }12 }13 class Phone14 {15 private String brand;//品牌16 private int price;//价格 17 private String color;//颜色18 19 public String getBrand()20 {21 return brand;22 }23 public void setBrand(String brand)24 {25 this.brand = brand;26 }27 28 public int getPrice()29 {30 return price;31 }32 public void setPrice(int price)33 {34 this.price = price;35 }36 37 public String getColor()38 {39 return color;40 }41 public void setColor(String color)42 {43 this.color = color;44 }45 }
运行结果:
品牌:null 价格:0 颜色:null品牌:小米价格:1999 颜色:白色
07.11 构造方法概述和格式
构造方法作用概述:给对象的数据进行初始化
构造方法格式:
1.方法名与类名相同
2.没有返回值类型,连void都没有
3.没有具体的返回值
例:
07.12 构造方法的重载及注意事项
构造方法注意事项:
1.如果不提供构造方法,系统会给出默认构造方法
2.如果提供了构造方法,系统将不再提供
3.构造方法也是可以重载的
07.13 成员方法的分类及使用
方法具体划分:
根据返回值:1.有明确返回值方法 2.返回void类型的方法
根据形式参数:1.无参方法 2.带参方法
例:
1 class Demo 2 { 3 public static void main(String[] args) 4 { 5 Student s = new Student(); 6 String str = s.getString(); 7 System.out.println(str); 8 s.show(); 9 s.method("小强");10 }11 }12 class Student13 {14 private String name;15 private int age;16 //有明确返回值的无参方法17 public String getString()18 {19 return "hello";20 }21 //返回void类型的无参方法22 public void show()23 {24 System.out.println("show run");25 }26 //返回void类型的带参方法27 public void method(String name)28 {29 System.out.println("name:"+name);30 }31 }
07.14 一个标准学生类的代码及测试
类的组成:
1.成员变量
2.构造方法[无参构造方法 / 带参构造方法]
3.成员方法[getXxx() / setXxx()]
给成员变量赋值的方式
1.无参构造方法 + setXxx()
2.带参构造方法
1 /* 2 学生类: 3 成员变量:name,age 4 构造方法:无参,带两个参 5 成员方法:getXxx()/setXxx() 6 show():输出该类的所有成员变量值 7 8 给成员变量赋值: 9 A:setXxx()方法10 B:构造方法11 12 输出成员变量值的方式:13 A:通过getXxx()分别获取然后拼接14 B:通过调用show()方法搞定15 */16 //测试类17 class Demo18 {19 public static void main(String[] args)20 {21 //方式1给成员变量赋值22 //无参构造+setXxx()23 Student s1 = new Student();24 s1.setName("小明");25 s1.setAge(27);26 //输出值27 System.out.println(s1.getName()+"---"+s1.getAge());28 System.out.println("----------------------------");29 30 //方式2给成员变量赋值31 Student s2 = new Student("小强",30);32 s2.show();33 }34 }35 36 class Student 37 {38 //姓名39 private String name;40 //年龄41 private int age;42 43 //构造方法44 public Student() 45 {46 }47 48 public Student(String name,int age) 49 {50 this.name = name;51 this.age = age;52 }53 54 public String getName() 55 {56 return name;57 }58 59 public void setName(String name) 60 {61 this.name = name;62 }63 64 public int getAge() 65 {66 return age;67 }68 69 public void setAge(int age) 70 {71 this.age = age;72 }73 74 //输出所有的成员变量值75 public void show() 76 {77 System.out.println(name+"---"+age);78 }79 }
07.15 一个标准的手机的代码及测试
1 //测试类 2 class Demo 3 { 4 public static void main(String[] args) 5 { 6 //创建对象 7 Phone p = new Phone(); 8 9 //给成员变量赋值10 p.setBrand("小米");11 p.setPrice(2299);12 p.setColor("白色");13 14 //获取值15 System.out.println(p.getBrand()+"---"+p.getPrice()+"---"+p.getColor());16 }17 }18 19 //定义手机类20 class Phone21 {22 //品牌23 private String brand;24 //价格25 private int price;26 //颜色27 private String color;28 29 //无参构造方法30 public Phone() 31 {32 }33 34 //getXxx()和setXxx()方法35 public String getBrand() 36 {37 return brand;38 }39 public void setBrand(String brand) 40 {41 this.brand = brand;42 }43 44 public int getPrice() 45 {46 return price;47 }48 public void setPrice(int price)49 {50 this.price = price;51 }52 53 public String getColor() 54 {55 return color;56 }57 public void setColor(String color) 58 {59 this.color = color;60 } 61 }
07.16 创建对象做了哪些事情
Student s = new Student();在内存中做了哪些事情?
1.加载Student.class文件进内存
2.在栈内存为s开辟空间
3.在堆内存为学生对象开辟空间
4.对学生对象的成员变量进行默认初始化
5.对学生对象的成员变量进行显示初始化
6.通过构造方法对学生对象的成员变量赋值
7.学生对象初始化完毕,把对象地址赋值给s变量
07.17 什么时候定义成员变量
如果这个变量是用来描述这个类的信息的,那么,该变量就应该定义为成员变量。变量的范围越小越好,因为能及时的被回收。
07.18 长方形案例练习
定义一个长方形类,定义求周长和面积的方法,然后定义一个测试类Demo,进行测试。
1 /* 2 成员变量:长,宽 3 成员方法: 4 求周长:(长+宽)*2; 5 求面积:长*宽 6 */ 7 import java.util.Scanner; 8 class ChangFangXing 9 {10 //长方形的长11 private int length;12 //长方形的宽13 private int width;14 15 public ChangFangXing()16 {17 }18 19 //仅仅提供setXxx()即可20 public void setLength(int length) 21 {22 this.length = length;23 }24 25 public void setWidth(int width) 26 {27 this.width = width;28 }29 30 //求周长31 public int getZhouChang() 32 {33 return (length + width) * 2;34 }35 36 //求面积37 public int getArea() 38 {39 return length * width;40 }41 }42 43 //测试类44 class Demo45 {46 public static void main(String[] args)47 {48 //创建键盘录入对象49 Scanner sc = new Scanner(System.in);50 51 System.out.println("请输入长方形的长:");52 int length = sc.nextInt();53 System.out.println("请输入长方形的宽:");54 int width = sc.nextInt();55 56 //创建对象57 ChangFangXing cfx = new ChangFangXing();58 //先给成员变量赋值59 cfx.setLength(length);60 cfx.setWidth(width);61 62 System.out.println("周长是:"+cfx.getZhouChang());63 System.out.println("面积是:"+cfx.getArea());64 }65 }
07.19 员工类案例练习
1 /* 2 成员变量:员工编号,姓名,年龄 3 构造方法:无参构造方法 4 成员方法: 5 getXxx()/setXxx(); 6 show(); 7 */ 8 9 class Employee 10 {11 //员工编号12 private String employeeId;13 //姓名14 private String name;15 //年龄16 private int age;17 18 //构造方法19 public Employee() 20 {21 }22 23 //getXxx()/setXxx()24 public String getEmployeeId() 25 {26 return employeeId;27 }28 29 public void setEmployeeId(String employeeId) 30 {31 this.employeeId = employeeId;32 }33 34 public String getName() 35 {36 return name;37 }38 39 public void setName(String name) 40 {41 this.name = name;42 }43 44 public int getAge() 45 {46 return age;47 }48 49 public void setAge(int age) 50 {51 this.age = age;52 }53 54 //显示所有成员信息的方法55 public void show() 56 {57 System.out.println("员工编号:"+employeeId+" 姓名:"+name+" 年龄:"+age);58 }59 }60 61 //测试类62 class Demo63 {64 public static void main(String[] args)65 {66 //创建对象67 Employee e = new Employee();68 69 //给成员变量赋值70 e.setEmployeeId("ID8899");71 e.setName("旺财");72 e.setAge(18);73 74 //获取数据75 //System.out.println(e.getEmployeeId()+"---"+e.getName()+"---"+e.getAge());76 77 //使用show方法78 e.show();79 }80 }
07.20 实现加减乘除并测试
1 import java.util.Scanner; 2 class MyMath 3 { 4 //加法功能 5 public int add(int a,int b) 6 { 7 return a + b; 8 } 9 10 //减法功能11 public int sub(int a,int b) 12 {13 return a - b;14 }15 16 //乘法功能17 public int mul(int a,int b)18 {19 return a * b;20 }21 22 //除法功能23 public int div(int a,int b) 24 {25 return a / b;26 }27 }28 29 //测试类30 class Demo31 {32 public static void main(String[] args)33 {34 //创建键盘录入对象35 Scanner sc = new Scanner(System.in);36 37 System.out.println("请输入第一个操作数:");38 int num1 = sc.nextInt();39 System.out.println("请输入第二个操作数:");40 int num2 = sc.nextInt();41 42 //创建MyMath对象,并使用43 MyMath mm = new MyMath();44 45 System.out.println(num1+"+"+num2+"="+mm.add(num1,num2));46 System.out.println(num1+"-"+num2+"="+mm.sub(num1,num2));47 System.out.println(num1+"*"+num2+"="+mm.mul(num1,num2));48 System.out.println(num1+"/"+num2+"="+mm.div(num1,num2));49 }50 }
运行结果:
请输入第一个操作数:8请输入第二个操作数:28+2=108-2=68*2=168/2=4
07.21 static关键字的引入
例:
1 class Person 2 { 3 String name; 4 //使用static修饰的数据称为对象的共享数据 5 static String country = "中国"; 6 public void show() 7 { 8 System.out.println("姓名:"+name+" 国家:"+country); 9 }10 }11 12 class Demo13 {14 public static void main(String[] args)15 {16 Person p1 = new Person();17 p1.name = "小明";18 p1.show();19 20 Person p2 = new Person();21 p2.name = "小红";22 p2.country = "美国";23 p2.show();24 p1.show();25 26 }27 }
运行结果:
姓名:小明 国家:中国姓名:小红 国家:美国姓名:小明 国家:美国
07.22 static关键字的特点
1.static是一个修饰符,用于修饰成员(成员变量和成员函数)
2.static修饰的成员被所有的对象共享
3.static优先于对象存在,因为static成员随着类的加载就已经存在了
4.static修饰的成员可以被对象调用,也可以直接被类名调用,格式为:类名.静态成员
5.static修饰的数据是共享数据,对象中存储的是特有数据
07.23 static的内存图解
07.24 static的注意事项
1.在静态方法中是没有this关键字的
2.静态方法只能访问静态的成员变量和静态的成员方法
3.主函数是静态的,如果要在主函数中调用非静态成员可以创建一个对象来调用
07.25 静态变量和成员变量的区别
1.所属不同
静态变量属于类,所以也称为为类变量
成员变量属于对象,所以也称为实例变量(对象变量)
2.内存中位置不同
静态变量存储于方法区的静态区
成员变量存储于堆内存
3.内存出现时间不同
静态变量随着类的加载而加载,随着类的消失而消失
成员变量随着对象的创建而存在,随着对象的消失而消失
4.调用不同
静态变量可以通过类名调用,也可以通过对象调用
成员变量只能通过对象名调用
07.26 main方法的格式详细解释
新闻热点
疑难解答