Java基础学习(五)- 面向对象
2020-05-16 本文已影响0人
做个合格的大厂程序员
面向对象
概念
把一些特定功能的实现或者属性封装成一个类,这样结构就清晰了很多。在用的时候调用对应的类即可。
特点
- 是一种符合习惯的思想
- 可以将复杂的事情简单化
- 从执行者变成了指挥者
定义一个类
代码示例
//定义一个学生类
public class student{
String name;
int age;
public void study(){
System.out.println("学生学习");
}
public void eat(){
System.out.println("学生吃饭");
}
}
使用给一个类
代码示例
Student s = new Student();
s.name = "张三";
s.age = 18;
s.eat();
s.study();
格式
类名 对象名 = new 类名()
成员变量和局部变量的区别
- 在类中的位置不同
- 成员变量:类中方法外
- 局部变量:方法内或者方法声明上
- 在内存中的位置不同
- 成员变量:堆内存
- 局部变量:栈内存
- 声明周期不同
- 成员变量:随着对象的存在而存在,随着对象的消失而消失
- 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
- 初始化值不同
- 成员变量:有默认的初始化值
- 局部变量:没有默认的初始化值,必须先定义,赋值,才能使用
Private关键字
定义
- Private 关键字
- 是一个权限修饰符
- 可以修饰成员(成员变量和成员方法)
- 被Private修饰的成员只能在类中才能访问
- Private最常见的应用
- 把成员变量用Private修饰
- 提供对用的getXX() / setXX() 方法
代码示例
public class Student {
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;
}
public void study(){
System.out.println("学生要学习");
}
public void eat(){
System.out.println("学生要吃饭");
}
}
我们不推荐外部直接拿到成员变量的值进行修改,因为出于安全性考虑,比如年龄,如果我们在外部直接赋值为-30
岁,显然不符合年龄的逻辑,所以我们应该在setAge方法中进行一定的校验,来保证数据的安全。例如:
public void setAge(int age) {
if (age >100 || age<0){
System.out.println("输入数据不合法,请重新输入");
}else{
this.age = age;
}
}
封装
概述
- 封装是面向对象的三大特征之一
- 是面向对象编程语言客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改,就像年龄一样。
原则
- 将不需要对外提供的内容都隐藏起来
- 把属性隐藏,提供公共方法对其访问
好处
- 通过方法来控制成员变量的操作,提高了代码的安全性
- 把代码用方法进行封装,提高了代码的复用性
构造方法
构造方法就是在类中重写一个public 类
的方法即可
public class Student {
public Student(){
System.out.println("这是构造方法");
}
}
标准类写法
代码示例1
public class Student {
private String name;
private int age;
public Student(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) {
if (age >100 || age<0){
System.out.println("输入数据不合法,请重新输入");
}else{
this.age = age;
}
}
public void study(){
System.out.println("学生要学习");
}
public void eat(){
System.out.println("学生要吃饭");
}
}
代码示例2
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) {
if (age >100 || age<0){
System.out.println("输入数据不合法,请重新输入");
}else{
this.age = age;
}
}
public void study(){
System.out.println("学生要学习");
}
public void eat(){
System.out.println("学生要吃饭");
}
上述的区别就是一个是使用系统默认的构造方法,一个是使用自定义的构造方法,除了在初始化类的时候不同,其他的使用都是一致的。