面向对象的特征:
封装,继承,多态
类:一组相关属性(数据成员)和行为(成员方法)的集合。抽象出事物的属性和行为来描述事物。
对象:一类事物的具体体现。
类和对象的关系:
类的定义:
例:定义一个学生类:
public class Student{
//成员变量
String name;//姓名
int age;//年龄
//成员方法
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void study(){
System.out.println("学习");
}
}
注意事项:
1、成员变量是直接定义在类当中的,在方法外边
2、成员方法不要写static关键字
3、通常情况下,一个类不能直接使用,需要根据类创建一个对象,才能使用
创建对象:
1、导包:
指出需要使用的类,在什么位置
import 包名称.类名称
对于和当前类属于同一个包的情况,可以省略语句不写
2、创建:
类名称 对象名=new 类名称();
Student stu =new Student ( ) ;
3、使用:
使用成员变量:对象名.成员变量名
使用成员方法: 对象名.成员方法名(参数)
public static void main(String[] args) {
Student stu=new Student();
stu.eat();
}
成员变量不赋值使用默认值,规则和数组一样
改变成员变量的值:
public static void main(String[] args) {
Student stu=new Student();
stu.age=101;
stu.name="lfa";
System.out.println(stu.age);
System.out.println(stu.name);
}
一个对象的内存图:
解释:堆中的方法存放点 的是方法在方法区的地址
两个对象使用同一个方法的内存图:
解释:同一个不同的对象在堆中地址不同,但是成员方法的地址相同
两个引用指向同一个对象的内存图
two是one的引用,两个在堆中的地址相同
对象作为方法的参数:
内存图:
类作为方法的返回值:
、
内存图:
成员变量和局部变量的区别:
1、定义的位置:【重点】
局部变量:方法的内部
成员变量:方法的外部,直接写在类当中
2、作用范围不一样【重点】
局部变量:只有方法中才可以使用,出了方法就不能再用
成员变量:整个类全都可以通用
3、默认值不一样【重点】
局部变量: 没有默认值,如果想要使用,必须手动赋值
成员变量: 如果没有赋值,会有默认值,规则和数组一样
4、内存的位置不一样(了解)
局部变量:位于栈内存
成员变量:位于堆内存
5、声明周期不一样(了解)
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
封装性:
封装性在java中的体现
1、方法就是一种封装
2、关键字private也是一种封装
封装就是把细节信息隐藏起来,对于外界不可见
private的使用
public class person{
private String name;
public void show(){
System.out.print(name);
}
public void setname(String na){
name=na;
}
public String GetName(){
return name;
}
}
在定义成员变量前加上private修饰,将该成员保护起来
本类中可以随意访问,但是超出本类范围之外就不能直接访问了
但可以通过成员方法间接访问,如用方法setX初始化X,getX获得X
注意对于获取boolean类型的成员变量,要写成isXxx的形式
this关键字:
当方法的局部变量和类的成员变量重名时,根据就近原则,优先使用局部变量
如果需要访问本类当中的成员变量,需要使用格式:
this.成员变量名
通过谁调用的方法,谁就是this
构造方法:
转门用来创建对象的方法,当通过关键字new来创建对象时,其实就是在调用构造方法。
格式:public 类名称(参数类型 参数名称)
{方法体}
注意事项:
1、构造方法的名称必须和所在类名称完全一样,就连大小写也要一样2、构造方法不要写返回值类型,连void都不写
3、构造方法不能有返回值
4、如果没有编写任何构造方法,编译器会有一个默认的构造方法,没有参数和方法体
6、一旦编写了至少一个构造方法,编译器将不会再用默认的构造方法
7、构造方法可以进行重载
public class Student{
private int age;
public Student(int age){
this.age=age;
}
public Student(){
System.out.println("执行无参构造方法");
}
}
public static void main(String[] args){
Student stu1=new Student();//调用无参构造函数
Student stu2=new Student(10);//调用有参构造函数
}
new 后加的其实就是对象的构造方法
一般使用构造方法对成员变量初始化,但是修改时还是需要用setXxx方法
定义一个标准的类:
private关键字修饰成员变量,Getter/Setter方法
无参数构造,全参数构造。
快捷键:Fn+Alt+Insert(笔记本右上角)
对象数组:
定义一个标准person类(String name; int age;)
定义一个数组,储存person对象:
person[] array=new person[3];
person one=new person("a",1);
person two=new person("b",2);
person three=new person("c",3);
array[0]=one;
array[1]=two;
array[2]=three;
一旦创建,数组长度不可改变