面向对象与面向过程的区别:
- 面向过程:从头到尾,亲力亲为
- 面向对象:交给别人去做
类的定义
类中包含成员变量(属性)和成员方法(行为)
成员变量在类中,但不在方法中
/*定义以一个类,模拟学生:
属性(是什么):姓名,年龄
行为(做什么):吃饭,睡觉,学习
成员变量(属性):
String name
int age
成员方法,没有static(行为):
public void eat(){}
public void sleep(){}
public void study(){}
*/
public static Student{
String name
int age
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void study(){
System.out.println("学习");
}
}
局部变量和成员变量的区别
-
定义的位置不一样【重点】
局部变量:在方法(
public static void name(){ }
)的内部成员变量:在方法的外部,写在类(
public class ClassName { }
)中 -
作用范围不一样【重点】
局部变量:只有方法中可以使用
成员变量:整个类中都可以使用
-
默认值不一样【重点】
局部变量:没有默认值,必须手动进行赋值,没赋值的局部变量不能用
成员变量:如果没有赋值,将会有默认值
-
内存的位置不一样
局部变量:位于栈内存
成员变量:位于堆内存
-
生命周期不同
局部变量:随着方法的进栈而产生,随着方法的出栈而消失
成员变量:随着对象创建而产生,随着对象被垃圾回收而消失
面向对象的封装性
封装就是将一些信息细节隐藏起来,对于外界不可见
-
方法就是一种封装
-
关键字private也是一种封装
-
private的作用:利用private将需要保护的成员变量进行修饰
private修饰的变量,在类中可以随意访问,但是类外不能直接访问
-
不能直接访问,但是可以间接访问(get和set方法)
//类中包括成员变量和成员方法 private int age /*如果成员变量由private修饰,那么就不能通过 .age 进行调用 如果需要修改由private修饰的变量,则需要使用get和set方法进行 在方法中添加setAge()和getAge()方法*/ public setAge(int num){ age=num; } /*setAge(int num)方法用于设置age的数据 可以在seAge(int num)方法中加入判断语句,这样就可以筛选我们想要的数据*/ public getAge(){ return age; } //getAge()方法用于获取age的数据 //特例:对于基本类型当中的boolean类型,他的getter方法要写成isXxx方式,而setXxx方式不变 例如: private boolean male; public boolean isMale(){ return male; }
-
-
this关键字
当方法的局部变量和类的成员变量相同时,根据就近原则会先调用局部变量
如果需要访问本类中的成员变量,则需要使用
this.成员变量名
public class person{
String name;
public static void sayHello(String name){
System.out.println(name+'你好,我是'+this.name);
}
}
public class Demo{
public static void main(String[] args){
person per = new person();
person.name="YYY"
person.sayHello("XXX")
}
}
//结果为,XXX你好,我是YYY
//调用同名的成员变量,就需要使用this关键字
构造方法
构造方法是专门用来创建对象的方法,当我们通过new来创建对象时,其实就是在调用构造方法
-
构造方法的名称一定要和类名称完全一致
-
构造方法不用写返回值,连void都不用写,但是参数可以是一个或者多个
以前 public static void 名称() { }
构造方法:public 类的名称() { }
-
构造方法不能return一个具体的返回值
-
如果没有编写构造方法,编译器会默认创建一个构造方法
-
一旦编写了至少一个构造方法,则编译器将不会创建构造方法
-
构造方法可以进行重载(名称相同,参数列表不同)
构造一个标准的类
标准的类需要有如下的四个部分:
- 所有的成员变量都需要使用private进行修饰
- 为每一个成员变量设置一对getter和setter方法
- 编写一个无参数的构造方法
- 编写一个全参数的构造方法
这样的标准类也叫做一个Java Bean
实例:
package HelloWorld;
public class Demo {
String name;
int age;
public Demo() {
}
public Demo(String name, int age) {
this.name = name;
this.age = 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;
}
}
package HelloWorld;
public class test {
public static void main(String[] args) {
Demo de = new Demo("郭XX",20);
System.out.println(de.name);
System.out.println(de.age);
System.out.println(de.getName());
System.out.println(de.getAge());
de.setAge(18);
de.setName("郭大");
System.out.println(de.getName());
System.out.println(de.getAge());
}
}
结果为:
郭XX
20
郭XX
20
郭大
18