JAVA面向对象--类与对象,三大思想之封装

版权声明:--------------------------转载请注明出处-------------------------- https://blog.csdn.net/qq_37850607/article/details/83903245


类的定义格式:

  [修饰符] class <类名>{
  
  }
  public class Student {
  
  }

修饰符: 可以用public|缺省。
class:描述类的,不能乱写的。只能这样写。
类名:首字母应该大写,满足“驼峰模式”,名词。

注意:一个Java代码文件中可以有多个类,只能有一个类是public修饰的。
Java代码文件的名字必须与public修饰的类名一致!

一个类中有且仅有5大成分(五大金刚):
1.成员变量(属性)
2.构造器(创建对象)
3.成员方法(方法)
4.内部类
5.代码块
注意:类中只能有这5种成分,否则报错!

a.成员变量:
成员变量是用来描述类或者对象的属性的。

格式:

  [修饰符] <数据类型>  <变量名称> [=初始值];
  
  public String name="张三" ;

注意:
修饰符:public|缺省|private|protected , static, final ,transient.
数据类型:基本数据类型,引用数据类型。
变量名称:首字母小写,满足“驼峰模式”,一般是名词。
初始值:可有可无。

b.构造器
构造器是用来创建当前类的对象的。
格式:

 [修饰符] 类名(形参列表){
     // 构造体代码
 }

修饰符:public | 缺省 |private | protected

类名:必须是当前构造器所在类的类名。
形参列表:数据类型 变量,数据类型 变量,…

对象是通过new调用构造器创建出来的。
类只有一个,对象可以千千万万。

c.成员方法
方法是用来描述类或者对象的行为的。
格式:

 [修饰符] <返回值类型> <方法名称>(形参列表){
 
 }

修饰符:public|缺省|private|protected , final|abstract , static

static关键字: 是面向对象最重要的关键字。
static == 静态 == 代表的是类的东西 ==> 类。

static可以用于修饰成员变量和方法。

static修饰成员变量和方法的区分:

  • 有static修饰的成员变量称为静态成员变量或者叫类变量。 这个成员变量就属于类,直接用类名访问即可。
  • 无static修饰的成员变量称为对象成员变量或者实例成员变量。
    这个成员变量属于对象的,必须先创建对象,然后用对象来访问。
  • 有static修饰的方法称为类方法或者静态方法。
    这个方法属于类的,直接用类名访问即可。
  • 无static修饰的方法称为对象方法或者实例方法。
    这个方法属于对象的,必须先创建对象,然后用对象来访问。

面试遇到用对象去访问静态成员建议改成用类名直接访问再解答题目!!

public class Student {

    // 有static修饰属于类的
    public static String schoolName = "***学校!";

    // 无static修饰的成员变量:实例成员变量,全属于对象的。
    // 姓名:
    public String name ;
    // 年龄
    public int age ;
    // 性别
    public char sex ;
    // 爱好
    public String hobby = "读书" ;
    // ....

    // 定义一个:无参数构造器
    public Student(){
        System.out.println("==无参数构造器==");
    }

    // 定义一个:有参数构造器
    public Student(String name , char sex , int age){

    }

    // 方法:实例方法:无static修饰,属于对象的。
    public void sing(){
        System.out.println("===sing()====");
    }

    // 有static修饰的:静态方法,属于类的。
    public static void test(){
        System.out.println("==test()==");
    }

}

成员变量和局部变量区别

  1. 变量定义位置不同 成员变量属于类的成分,定义在类下的 局部变量定义在方法中,构造器中,代码块中,for循环中。
  2. 作用范围不一样 重点 成员变量:(全局变量)
    – 静态变量,应该用类名访问
    – 实例变量,应该用对象访问
    局部变量:方法中
  3. 初始化值的不同 重点
    成员变量:有默认值 (成员变量可以没有初始值)
    局部变量:没有默认值。必须先定义,赋值,最后使用
  4. 在内存中的位置不同
    成员变量:堆内存 (属于类或者属于对象的)
    局部变量:栈内存 (属于方法)
  5. 生命周期不同
    成员变量: 实例变量是随着对象的创建而存在,随着对象的消失而消失 静态变量是随着类的存在而加载 成员变量: 实例变量是随着对象的创建而存在,随着对象的消失而消失 静态变量是随着类的存在而加载
    局部变量:随着方法的调用而存在,随着方法的 调用完毕而消失

封装

把该隐藏的进行隐藏,该暴露的进行暴露。
封装的核心思想:合理隐藏,合理暴露。

封装是把不安全的东西或者不愿意暴露的东西封装起来,外部直接调用即可!

发动机-> 被封装了 合理暴露了油管。
洗衣机 -> 被封装了 合理暴露了按钮和洞
电脑 -> 合理封装了 合理暴露了接口和显示器

Java封装是通过权限修饰符去控制的。
public : 公开权限(公交车)
缺省
private : 私有权限(私家车)
protected

Java成员变量的封装规范:
1.Java认为实例成员变量应该私有private:合理隐藏。(不是绝对的,有些成员变量还是会public)。
2.Java认为方法应该公开权限public : 合理暴露(不是绝对的,有些方法也会隐藏起来)

规范化设计:
1.成员变量私有
2.提供对于的get,set方法暴露。
set+成员变量首字母大写 : 设值
get+成员变量首字母大写 : 取值。

this关键字:
用在构造器和方法中。
this代表的是对象。
this用在方法中,谁调用这个方法,this就代表谁。

有参数构造器 : 可以用来初始化对象的数据!

注意事项

  1. 如果你不提供构造方法,系统会给出无参数构造器。
  2. 如果你提供了构造方法,系统将不再提供无参数构造器。Constructor
  3. 构造器是可以重载的,既可以定义参数,也可以不定义参数。

封装标准代码:

/**
 标准代码——JavaBean:
     是一种代码规范:
      1.首先是一个类。学生类,书类,手机类,一个事物类。
      2.成员变量 私有
      3.必须有无参数构造器
      4.必须提供set get方法。

     //成员变量 私有
     //构造器
     //  -- 无参构造器【必须有】
     //  -- 有参构造器【建议有】
     //getXxx()
     //setXxx()

 */
public class Student {
    // 1.成员变量 私有
    private String name ;
    private int id ;
    private String className ;
    private char sex ;
    private int age ;

    // 2.无参构造方法【必须有】
    public Student() {

    }

    // 3.有参构造方法【建议有】
    public Student(String name, int id, String className,
                   char sex, int age) {
        this.name = name;
        this.id = id;
        this.className = className;
        this.sex = sex;
        this.age = age;
    }

    // getXxx()
    // setXxx()
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37850607/article/details/83903245
今日推荐