Java基础学习

1、方法体外声明的变量叫成员变量。(成员变量中的实例变量,必须先创建对象,通过“引用”来访问。)
2、方法体中声明的变量叫做局部变量。

属性的访问

1、引用类里的对象(用.)

一、程序在什么情况下会显示空指针异常(NullPointerException

空引用访问实例【对象相关】相关数据时,都会出现空指针异常。
垃圾回收器主要针对堆内存。

二、方法在调用时参数是如何传递的?

Java中关于方法调用时参数传递实际上只有一个规则:
不管你是基本数据类型,还是引用类型,实际上在传递的时候都是将变量保存的那个“值”复制一份,传过去。

三、构造方法

构造方法的定义方式:

class 类名称
{
      访问权限 类名称(类型1 参数1,类型2 参数2······)//构造方法
      {
            程序语句;//构造方法没有返回值
      }
}

1、当一个类中没有提供任何构造方法,系统默认提供一个无参数的构造方法,这个无参数的构造方法叫做缺省构造器。
2、当一个类中手动的提供了构造方法,那么系统将不再提供无参数的构造方法。(把无参数的构造方法写出来便解决了出现错误)
3、无参数构造方法,和有参数的构造方法可以同时调用。

      a3 s1= new a3();
      a3 s2= new a3(10);

4、构造方法支持方法重载吗?
构造方法是支持方法重载的。在一个类当中构造方法可以有多个,并且所有的构造方法名字都是一个样的。
方法重载特点:
在同一个类中,方法名相同,参数列表不同,

4、构造方法对应的英语单词:Constructor【构造器】
5、构造方法作用:创造对象,并创建对象的过程中给属性赋值(初始化)
思考:实例变量没有手动赋值的时候,实际上系统就会默认赋值,那么这个默认赋值操作是在什么时间进行的?是在类加载的时候给这些实例变量赋值的吗?
答:不是,实例变量是在构造方法执行的过程中完成初始化的,完成赋值的。
6、对于实例变量来说,只要你在构造方法中你没有手动给它赋值,统一都会默认赋值,默认系统值。

四、封装

1、面向对象的三大特征:

  • 封装
  • 继承
  • 多态
    有了封装,才有继承,有了继承,才能说多态
    2、什么是封装?有什么用?
    内部的复杂机构包装起来
    保证内部结构的安全;屏蔽复杂,暴露简单
    3、怎么进行封装?代码怎么实现?
    第一步: 属性私有化(使用private关键字进行修饰)
    第二步:对外提供简单的操作入口。(对外提供set方法和get方法作为操作入口,并且都不带static。都是实例方法,实例方法的调用必须先new对象。)外部程序只能通过set方法修改,只能通过get方法读取,可以在set方法中设立关卡来保证数据的安全兴。

注意:Java开发规范中要求,set方法和get方法要满足以下格式。
get方法的要求:

public 返回值类型 get+属性名首字母大写(无参){
      return xxx;
}

set方法的要求:

public void set+属性名首字母大写(有一个参数){
      xxx = 参数;
}

封装练习代码:

class Mycat{
    private int age;//私有化猫的年龄
    private float weight; //私有化猫的体重
    //定义有参数的构造函数
    public Mycat(int a,float wt){
        //调用私有的SetAge()方法
        SetAge(a);
        //调用私有的SetWeight()方法
        SetWeight(wt);
    }
    //私立的方法
    private void SetAge(int a)
    {
        if(a<0)
            System.out.println("age的设置非法(应该是>0)");
        else if(a<=100)
        {
            age = a;
//          System.out.println("我的这只猫的年龄为:"+ age);
        }
        else
            System.out.println("age设置非法!!!");
    }
    private void SetWeight(float wt)
    {
        if(wt<0)
            {
                System.out.println("weight设置非法(应该是>0)");
            }
            else if(wt<=100)
            {
                weight=wt;
//              System.out.println("我的这只猫的体重为:" + weight); 
            }
            else 
            {
                System.out.println("weight设置非法!!!");
            }
    }
    //创建共有的方法Getage()作为与外界通信的接口
    public int Getage()
    {
        return age;
    }
    //创建共有的方法GetWeight()作为与外界通信的接口
    public float GetWeight()
    {
        return weight;
    }
}
public class TestEncapsulation {
    public static void main(String[] args){
        Mycat aCat = new Mycat(1001,-20f);
//      aCat.Getage();
//      aCat.GetWeight();
        System.out.println("我的这只猫的年龄为:"+aCat.Getage());
        System.out.println("我的这只猫的体重为:"+aCat.GetWeight());
    }
}

输出结果为:

image.png

你可能感兴趣的:(Java基础学习)