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;
}
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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秒 10000ms
car.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();
}
}
作业:
1.今天的代码敲上三遍以上
2.成人类下面有孩子类,孩子类下面玩具类
3.十二生肖 今天加封装