day7 局部变量和封装
1.局部变量
package com.qfedu.a_var;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {//int i = 0;//成员变量for (int i = 0; i < 10; i++) {//局部的变量 i 只能局部使用System.out.println(i);int[] arr ={1,3,4,5,6};}//test(arr);//System.out.println(i);}public static void test(int[] arr) {System.out.println(Arrays.toString(arr));}
}
2.局部变量和成员变量的区别
区别 | 成员变量 | 局部变量 |
---|---|---|
定义的位置 | 定义在类的大括号内 | 定义在方法或者代码块大括号以内 |
作用 | 描述当前的类对象的属性 | 用于在代码中保存数据,数值和参数的 |
初始值 | 是对应当前数据的"0"值 | 没有赋值不能使用 |
所处内存空间 | 类对象在堆区 | 栈 |
作用域 | 谁持有类对象的地址,谁就可以使用 | 只能在大括号中 |
生存期 | 对象创建,出现成员变量。销毁对象,成员变脸销毁 | 只能在大括号中 |
3.jvm的垃圾回收机制
jvm是虚拟的软件,可以在任何平台上运行。
GC jvm虚拟机的垃圾回收机制
图书管理员
jvm的gc在一段时间内,自动检测整个内存。是否有无主内存。如果存在就回收。如果没有,就等待下一次的回收机制。
4.封装
java三大特性:封装 继承 多态
封装是java面向对象的一种思想
类的封装。方法的封装,包的封装等的
在写类的时候,之前的成员变量,什么也没有修饰。谁都可以使用这个变量。只要通过对象.属性就可以来直接操作咱们的成员变量。这样是有一定的隐患的。如果咱们向要对数据添加一定的限制和判断怎么办?
使用关键字private (私有的) 修饰
package com.qfedu.a_var;public class Person {//成员变量private String name;//姓名private int age;//年龄private char gender;//性别public Person() {}public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setGender (char gender) {this.gender = gender;}public char getGender () {return gender;}//设置了年龄public void setAge(int age) {if (age > 0 && age < 120) {this.age = age;} else {this.age = 0;}}public int getAge() {return age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", gender=" + gender +'}';}
}
总结:
如果想要对类的属性进行封装的话。
1.对成员变量进行私有化(包装了)
2.写成员变量对应的set和get方法
注意事项:
1.从今天开始,你写的类下面的所有的成员变量全部都要私有化(private)。这是一种规范。
2.可以更加规范对于成员变量的操作
3.可以隐藏一部分代码的操作过程
package com.qfedu.a_var;//实体类
public class Bird {//成员变量//种类private String kind;private String color;private boolean size;public Bird() {}public String getKind() {return kind;}public void setKind(String kind) {this.kind = kind;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public boolean isSize() {return size;}public void setSize(boolean size) {this.size = size;}@Overridepublic String toString() {return "Bird{" +"kind='" + kind + '\'' +", color='" + color + '\'' +", size=" + size +'}';}
}
5.this关键字
字面意思:
这儿,这个
1.表示调用当前方法的类对象
可以使用this调用类对象的成员变量和成员方法
也可以用于操作当前类对象
2.this可以调用构造方法(考点)
格式:
this(实际参数);
a.有且只能用在构造方法内。
b.this()在类内调用其他的构造方法。是根据传参不同决定调用哪个构造方法
c.不能调用本身的构造方法
d.this(实际参数),有且只能放在当前构造方法的第一行。
package com.qfedu.testThis;class Dog {private String name;private int age;private char gender;public Dog() {System.out.println("无参数的构造方法");}public Dog(String name) {this("狗蛋", 12, '女');//相当于在有参数的构造方法中调用了无参数构造方法this.name = name;System.out.println("带有String类型的构造方法");}public Dog(String name, int age) {this.name = name;this.age = age;System.out.println("带有String,int类型的构造方法");}public Dog(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;System.out.println("带有String,int,char类型的构造方法");}public void test() {System.out.println(this);}
}
public class Demo1 {public static void main(String[] args) {// Dog dog = new Dog();
// /*
// *
// * java中如果两个类的对象的空间地址是一样的,就证明是同一个对象
// * */
// dog.test();
// System.out.println(dog);Dog dog1 = new Dog("旺财");//dog1.test();System.out.println(dog1);}
}
6.多类合作的练习题
1.人类
属性:name,age,sex,cat
2.猫类
属性:name age
package com.qfedu.class1;public class Person {private String name;private int age;private boolean sex;private Cat cat;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}public Cat getCat() {return cat;}public void setCat(Cat cat) {this.cat = cat;}
}
package com.qfedu.class1;public class Cat {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", age=" + age +'}';}
}
package com.qfedu.class1;public class Demo1 {public static void main(String[] args) {Person person = new Person();Cat cat = new Cat();cat.setName("rose");cat.setAge(12);person.setName("zixin");person.setAge(78);person.setCat(cat);Cat cat1 = person.getCat();System.out.println(cat1);}
}
汽车类:
属性:颜色,品牌,车轮胎个数
行为:飙车
修理厂:
属性:店的名字,地址,练习方式
行为:修车
修理厂修车的方法:
方法需要一个外来数据。一个别人的车
c车是一个类对象。当前修车方法的参数是一个汽车类的对象
package com.qfedu.class2;/*
*
* 汽车类: 属性:颜色,品牌名字,车轮胎个数 行为:飙车
* */
public class Car {//成员变量private String color;private String name;private int wheelCount;public Car() {}public Car(String color, String name, int wheelCount) {this.color = color;this.name = name;this.wheelCount = wheelCount;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getWheelCount() {return wheelCount;}public void setWheelCount(int wheelCount) {this.wheelCount = wheelCount;}/*飙车方法:要求轮胎必须是4个,缺一不可*/public void race () {if (wheelCount == 4) {System.out.println("开着"+ color + name + ",在航海中路上以200km/h飙车");} else {System.out.println("去修理厂!!!");}}
}
package com.qfedu.class2;/*修理厂: 属性:店的名字,地址,联系方式 行为:修车*/
public class Factory {private String name;private String addr;private String tel;public Factory() {}public Factory(String name, String addr, String tel) {this.name = name;this.addr = addr;this.tel = tel;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;}/** 修理厂有一个修车的方法,* 分析方法:* 方法名字:repair* 形式参数的列表:* 该方法的参数是一个有问题的车,是一个Car类的对象* 返回值类型:* void* public void repair(Car car) {}* *//*** 修理厂类的修车方法,这个里面传入的是car对象* @param car*/public void repair (Car car) throws InterruptedException {//传入car对象的时候,轮胎的个数是否是4个?if (car.getWheelCount() < 4) {System.out.println("修理中........");Thread.sleep(10000);//睡10秒 10000mscar.setWheelCount(4);System.out.println("修理完成,请付款,2w");} else if (car.getWheelCount() == 4) {System.out.println("你脑子瓦特了吧");}}
}
package com.qfedu.class2;public class Demo1 {public static void main(String[] args) throws InterruptedException {Car car = new Car("green", "法拉利",4 );for (int i = 0; i < 10; i++) {car.race();Thread.sleep(1000);}System.out.println("轮胎跑掉一个。。。。");car.setWheelCount(3);car.race();Factory factory = new Factory();factory.setName("boge汽修");factory.setAddr("航海中路60号海为科技园12楼");factory.setTel("138后面随便");factory.repair(car);for (int i = 0; i < 20; i++) {car.race();}}
}
键盘类
属性:品牌,按键的个数
行为:敲代码
屏幕类
属性:品牌 尺寸
行为:显示bug
电脑类
属性:键盘类对象,屏幕类对象
行为:换键盘,换屏幕,写bug
package com.qfedu.class3;/*
*
* 属性:品牌,按键的个数 行为:敲代码
* */
public class Keybord {private String name;private int keyCount;public Keybord() {}public Keybord(String name, int keyCount) {this.name = name;this.keyCount = keyCount;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getKeyCount() {return keyCount;}public void setKeyCount(int keyCount) {this.keyCount = keyCount;}public void coding () {System.out.println("噼里啪啦的敲代码!!!");}
}
package com.qfedu.class3;/*屏幕类 属性:品牌 尺寸 行为:显示bug*/
public class Screen {private String name;private double size;public Screen() {}public Screen(String name, double size) {this.name = name;this.size = size;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSize() {return size;}public void setSize(double size) {this.size = size;}public void show () {System.out.println("显示咱们无处遁形的bug");}
}
package com.qfedu.class3;/*
* 电脑类 属性:键盘类对象,屏幕类对象 行为:写bug
* */
public class Computer {private Keybord keybord;private Screen screen;public Computer() {}/*** 大电脑类带的两个参数,是键盘类的对象和屏幕类的对象* @param keybord* @param screen*/public Computer(Keybord keybord, Screen screen) {this.keybord = keybord;this.screen = screen;}public Keybord getKeybord() {return keybord;}public void setKeybord(Keybord keybord) {this.keybord = keybord;}public Screen getScreen() {return screen;}public void setScreen(Screen screen) {this.screen = screen;}public void writeBug() {System.out.println("使用"+ keybord.getName() + ":" + keybord.getKeyCount()+"," + screen.getName()+ ":" + screen.getSize() + "写bug");}
}
package com.qfedu.class3;public class Demo1 {public static void main(String[] args) {Keybord keybord = new Keybord("双飞燕", 87);Screen screen = new Screen("京东方", 15.6);Computer computer = new Computer(keybord, screen);computer.writeBug();//使用罗技键盘Keybord keybord1 = new Keybord("罗技", 108);computer.setKeybord(keybord1);computer.writeBug();//换个屏幕Screen screen1 = new Screen("SONY", 32.0);computer.setScreen(screen1);computer.writeBug();}
}
7.匿名对象(很好用)
语法格式:
创建对象:
类名 对象名字 = new 类名()
赋值号左侧只是在内存的栈区定义了一个变量而已。而这个变量是引用数据类型。
赋值号右侧在内存的堆区创建了类的对象。并且把当前类对象内存的空间首地址,赋值给了左侧的引用数据类型
匿名对象:
就是没有对象名字的对象!!
语法格式:
new 类名()
用途:
1.直接调用类的成员方法
2.使用匿名对象当成参数传给一个方法
package com.qfedu.niming;class Person {private String name;public Person() {}public Person(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void eat() {System.out.println("民以食为天");}
}public class Demo1 {public static void main(String[] args) {//Person person = new Person();
// Person person = new Person();
// Person person1 = new Person();
// person.setName("狗蛋");
// person1.getName()//使用匿名对象new Person().eat();new Person().setName("狗蛋儿");//肉包子打狗一去不会,new 一个Person就是新的对象System.out.println(new Person().getName());//Person person = new Person();test(new Person());}public static void test(Person person) {person.eat();}
}
day7 局部变量和封装相关推荐
- day7 java的封装
在类定义中用private关键字来实现封装. eg: public class Student { //学号 private int id; //姓名 private String name; //年 ...
- Java基础day7
Java基础 Java基础day7-面向对象 1 类和对象 1.1 类和对象的理解 1.2 类的定义 对象的使用 1.4 学生对象-练习 2. 对象内存图 3. 成员变量和局部变量 4. 封装 4.1 ...
- 【转】异步编程:.NET 4.5 基于任务的异步编程模型(TAP)
最近我为大家陆续介绍了"IAsyncResult异步编程模型 (APM)"和"基于事件的异步编程模式(EAP)"两种异步编程模型.在.NET4.0 中Micro ...
- 【转】1.8异步编程:.NET 4.5 基于任务的异步编程模型(TAP)
传送门:异步编程系列目录-- 最近我为大家陆续介绍了"IAsyncResult异步编程模型 (APM)"和"基于事件的异步编程模式(EAP)"两种异步编程模型. ...
- 关于面向过程和面向对象的理解
要搞清楚面向过程和面向对象,必须搞清楚以下3点: 1.么是面向过程的程序设计思想 2.面向过程的程序设计思想编写程序时有什么问题? 3.为解决面向过程思想中的致命缺陷,于是C语言引入了封装类,进入了面 ...
- JavaScript小记(持续更新)
注意:(2020.01.14) 后续将都在我的学习笔记文档 - JavaScript小记中进行更新,该文章不再更新,请持续关注上述网页 学习js遇到的疑问和js基础都记录在这里,持续更新中. 2019 ...
- 学会这门知识可日后无忧
让人受益终身的潮流知识 面向对象 三大特征:封装 继承 多态 对象:我们生活中的一切事物都可看为对象,即万物皆对象 面向对象:java是一种面向对象语言用java来进行面向对象的编程,编程必须有建立面 ...
- 深入探究 WinRT 和 await
转自:http://blogs.msdn.com/b/windowsappdev_cn/archive/2012/04/30/winrt-await.aspx 在最近发布的使用 Windows 运行时 ...
- SICP2——Python中使用函数构建对象
一.使用对象构建抽象 1.1 数据抽象 现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示对象.-根本不必考虑它们到底代表着什么东西. 上一篇文章主要强调的是对数据的操作以及这些操作之间的组合与 ...
- 对jquery框架的理解
jQuery的基本框架代码: 要搞明白的问题: 1. 仅向外提供两个命名空间:即jQuery和它的简称$,一切对jQuery库内方法的调用,都只能通过这两个命名空间. 2. jQuery对象的生成 ...
最新文章
- 疑问:undistortPoints()与remap()畸变校正后,结果相差很大
- 如何使用Java获取当前日期/时间
- Winupdatelist
- 中学校园网建设实践与思考
- java多态的理解(运行时多态)_Java多态的理解
- HDOJ---2236 无题II[二分枚举+匈牙利]
- 32 位的有符号整数_「js基础」JavaScript逻辑和位运算符归纳
- SQL Server高级查询之数据库安全管理 第六章节
- paip.网站接入QQ登录总结
- 大学生对于繁体字的态度与认知情况调查
- 环信即时通信聊天理解
- java前端vml_在Web中使用JavaScript和VML实现WebGIS中的测距
- python怎么换行输入print_python中print换行的方法
- HDU 4960:Another OCD Patient
- 接收灵敏度的定义公式
- 【转】委外加工的核算流程
- 揭秘:蓝光光碟“造”太阳能电池的神奇之处
- 对汇编中无条件转移指令的认识
- Java系列之JDBC和ODBC之间的区别与联系
- 自动驾驶|苹果证实已收购自动驾驶初创公司Drive.ai 价格尚未披露
热门文章
- 解决KEIL MDK编译生成Bin文件时,却生成了*bin文件夹
- 2011QQ搞笑个性签名:小弟不才,大名耶稣.小名上帝.法号如来
- 12306 Android 8,铁行火车票12306
- VS2019提示“未能完成操作,不支持此接口”
- excessive cpu 优化杀进程解决方案 android P
- 使用Linux修复Windows PC的10种最聪明的方法
- vue综合项目——悦听音乐播放器
- 上周刚号召加班,这周立马双休,董明珠把互联网玩明白了……
- 管理“项目”之人际关系篇
- 百度地图api使用时标注图标显示不出来