一、面向对象
面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做事儿。
二、类的定义
定义一个类,用来模拟“学生”事物,其中就有俩个组成部分。
属性(是什么):
姓名
年龄
行为(能做什么):
吃饭
睡觉
学习
对应到java的类当中
成员变量(属性):
String name;//姓名
int age;//年龄
成员方法(行为):
public void eat(){ }//吃饭
public void sleep(){ }//睡觉
public void study(){ }//学习
注意:
1.成员前写法统一为public
2.成员变量是直接定义在类当中的,在方法外边
3.类名注意采用大驼峰形式
定义一个学生类
public class Student {
public String name;
public short age;
public void eat(){
System.out.println("吃饭!");
}
public void sleep(){
System.out.println("睡觉!");
}
public void study(){
System.out.println("学习!");
}
}
三、类的实例化
通常情况下,一个类并不能直接使用,需要根据创建一个对象,才能使用。
//1、导包
//位于同一个包下,可以省略不写
//2、创建,格式
Student stu = new Student();
//3、使用
//对象名.成员变量名
System.out.println(stu.name);
System.out.println(stu.age);
//改变对象当中的成员变量数值内容
System.out.println("======================");
stu.name="王奥奥";
stu.age=18;
System.out.println(stu.name);
System.out.println(stu.age);
System.out.println("======================");
//4、成员方法
// 使用成员方法:对象名.成员方法名(参数)
stu.eat();
stu.sleep();
stu.study();
四、成员变量和局部变量的区别
1、定义的位置不一样
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类当中
2、作用范围不一样
局部变量:只有在方法中才能使用,出了方法不能使用
成员变量:整个类都可以通用
3、默认值不一样
局部变量:没有默认值,如果想使用,必须手动赋值
成员变量:如果没有赋值,会有默认值,规则和数组一样
4、内存位置不一样
局部变量:位于栈内存
成员变量:位于堆内存
5、生命周期不一样
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
六、面向对象的特征
面向对象的三大特征:封装、继承、多态。
封装性在Java中的体现:
1、方法就是一种封装
2、关键字private也是一种封装
七、Private关键字
问题描述:定义Person的年龄时,无法阻止不合理的数值被设置进来
解决方案:用private关键字将需要保护的成员变量进行修饰。
一旦使用了private进行修饰,那么本类当中仍然可以随意访问。
但是!超出本类范围之外就不能访问了。
间接访问private成员变量,就是定义了一对儿Getter/Setter方法
必须叫setXXX或者getXXX命名规则。
对于Getter来说,不能有参数,返回值类型和成员变量对应;
对于Setter来说,不能有返回值,参数类型和成员变量对应。
String name;
private int age;
public void show(){
System.out.println("我叫"+name+",今年"+age+"岁。");
}
//这个成员方法,专门用于age设置数据
public void setAge(int num){
if(num<100 && num>0){
age = num;
}else{
System.out.println("数据错误");
}
}
//这个成员方法,专门获取age的数据
public int getAge(){
return age;
}
!!!对于基本类型当中的Boolean值,Getter方法一定要写成isXXX的形式,而
setXXX不变
private boolean male;//是不是男的
public void setMale(boolean b){
male = b;
}
public boolean isMale() {
return male;
}
八、this关键字
当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。
如果需要访问本类当中的成员变量,需要使用格式:
this.成员变量名
通过谁调用的方法,谁就是this.
String name;
//参数是对方的名字
//name是自己的名字
public void sayHello(String name){
System.out.println(name+",你好!我是"+this.name);
}
九、构造方法
构造方法是专门用来创建对象的方法,当我们通过关机字new来创建对象时,其实就是在调用构造方法。
格式:
public 类名称(参数类型 参数名称){
方法体
}
注意:
1、构造方法的名称必须和所在的类名称完全一样,就连大小写也一样;
2、构造方法不要写返回值类型,连void都不写;
3、构造方法不能return一个具体的返回值;
4、如果没有编写容忍和构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么都不做;
public Stuednt02(){}
5、一旦编写了至少一个构造方法,那么编译器将不再赠送;
6、构造方法也是可以进行重载的。
重载:方法名称相同,参数列表不同。
public class Student02 {
//成员变量
private String name;
private int age;
//无参数的构造方法
public Student02(){
System.out.println("无参构造方法执行啦!");
}
//有参数的构造方法
public Student02(String name,int age){
System.out.println("全参构造方法执行啦!");
this.name = name;
this.age = age;
}
// Getter Setter
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
十、定义一个标准的类
一个标准的类通常要拥有下面四个组成部分:
1、所有的成员变量都要使用private关键字修饰
2、为每一个成员变量编写一对儿Getter/Setter方法
3、编写一个无参数的构造方法
4、编写一个有参数的构造方法
这样的标准类也叫做Java Bean