1.类和对象
类:
java中类是对具有共同属性(名词)和共同行为(动词)的一类事物的描述。
对象:
对象是类的具体体现。
学生类的创建:
package com.itheima01;
//学生类
public class Student {
//成员变量
//姓名
String name;
//性别
String sex;
//年龄
int age;
//成员方法
//吃饭
public void eat(){
System.out.println("学生都是干饭人!");
}
//学习
public void study(){
System.out.println("学生键盘敲烂 月薪过万!");
}
}
package com.itheima01;
public class Demo02 {
public static void main(String[] args) {
//创建对象
Student s = new Student();
//赋值
s.name = "马冬梅";
s.sex = "女";
s.age = 32;
System.out.println("ta的姓名是" + s.name + "ta的年龄是" + s.age);
//调用方法
s.eat();
s.study();
}
}
2.对象的内存图
2.1一个对象的内存图
2.2两个对象的内存图
2.3两个变量指向一个对象内存图
3.成员变量和局部变量的区别
定义位置不同:【最重要的区别】
成员变量:定义在类中方法外的变量
局部变量:定义在方法中的变量
内存位置不同:
成员变量:存储在堆内存使用
局部变量:存储在栈内存使用
生命周期不同:
成员变量:随着对象的创建而产生,随着对象的消失而消失
局部变量:随着方法的调用而产生,随着方法的结束而消失
默认值不同:
成员变量:有默认值,如果不赋值有默认值
整数---> 0
小数---> 0.0
字符---> 空字符
布尔---> false
其他所有---> null
局部变量:没有默认值,如果不赋值就不能输出
4.封装
4.1private
含义?
私有的
修饰什么?
修饰成员变量和成员方法
加了有什么用?
被private修饰之后,只能在本类中直接访问,不能在其他类中直接访问
封装的好处?
提高代码的安全性
private是一种封装,封装不只有private
4.2set方法和get方法
set方法:
给成员变量赋值
get方法:
获取成员变量的值
每个变量只要被private修饰了,就需要给一个变量提供两个方法
4.3this
this的作用:
1.在成员变量和局部变量重名的情况下,this.变量名代表的是成员变量
2.this可以代表本类的对象,哪个对象调用方法,方法中的this就代表哪个对象(现在用不到,以后会用到)
5.构造方法
1.构造方法在什么时候调用?
构造方法是在创建对象的时候调用
有参构造方法可以在创建对象的时候,同时给成员变量赋值(初始化值)
2.构造方法的格式:
public 类名(){
}
3.构造方法的特点:
1.构造方法方法名和类名一致
2.构造方法没有返回值类型
3.构造方法也可以写return,只不过后面不能跟值
4.构造方法也可以重载
4.构造方法的注意事项:
1.当一个类中不写构造方法时,系统会默认提供一个空参构造
2.当类中写了构造方法时,系统就不会再默认提供空参构造
6.最终的标准类
package com.itheima03;
//学生类
public class Student {
//姓名
private String name;
//性别
private String sex;
//年龄
private int age;
//构造方法
public Student() {
}
public Student(String name, String sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
//set get
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//成员方法
//吃饭方法
// 马冬梅正在吃刀削面
public void eat(String food){
System.out.println(name + "正在吃" + food);
}
}
public class Demo02 {
public static void main(String[] args) {
//创建学生对象
Student s1 = new Student();
s1.setName("马冬梅");
s1.setSex("女");
s1.setAge(18);
//打印
System.out.println(s1.getName() + " " + s1.getAge());
//创建学生对象
Student s2 = new Student("马冬梅","女",20);
s2.eat("刀削面");
s2.eat("包子");
//打印
System.out.println(s2.getName() + " " + s2.getAge());
//set方法赋值 和构造方法赋值 功能上感觉一样
//两种写法都要留下
//我们自己写代码时可以哪个简单用哪个
}
}