java 类与对象 学习笔记

1 引言
Java是一门面向对象编程语言,谈到类与对象,我们就不得不先回顾面向对象的一些特征。
2 面向对象的三大特征

封装性:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类
或者对象操作,对不可信的进行信息隐藏。也就是说,内部操作对外部而言不可见。
继承性:可以使用现有类的所有功能,并在无需重新编写原来
的类的情况下对这些功能进行扩展。//关键字extends
多态性:一个类实例的相同⽅法在不同情形有不同的表现形式。
多态机制使具有不同内部结构的对象可以共享相同的外部接口。

3 基本概念

类是对具体事物的抽象,它告诉了我们需要的特征,它是一个模板。
对象就是根据模板我们真正实现的具体的事物。
属性,描述每个对象的具体特点。
方法(函数),描述操作的行为。

4 类的定义

   class 类名{
    属性1;//例如  public int i=0;
    属性2;//      private static int j=10;
    属性n;
    方法1(){
        代码块
    }
    方法2(){
        代码块
    }
}

被public所修饰的类为主类,文件名必须与主类名一致
这里引出一个阿里命名规约(按照规约命名可提高代码可读性)

类名 采用大驼峰形式命名
class PlaycomputerGame //所有单词首字母大写
方法名 采用小驼峰形式命名
public void playGame  //第一个单词首字母小写,其余单词首字母均大写
包名  所有字母小写
常量名 全部大写,多个单词间下划线隔开 //   String MY_NAME="一起养狗呀";

上面给出了定义类的模板,下面写段具体的代码演示

public class Person {
    private String name;  //实例变量:类的属性由变量来表示,这些变量称为实例变量
    private int age;          //实例变量
    public Person(String name,int age ){ //定义了有参数的构造方法
        this.name=name;
        this.age=age;
    }
    public void getPerson(){
        System.out.println("姓名:"+this.name+"   年龄:"+this.age);
    }

    public static void main(String[] args) {
        Person person=new Person("一起养狗呀", 22);  //生成对象时,会自动调用构造方法,
        因为定义的是有参的构造方法,所以()内得传对应的参数
        person.getPerson();
    }
}

以上代码又引出以下几点

4.1实例变量

实例变量初始值为默认值。
boolean -> false
byte -> 0
short -> 0
char -> ‘\u0000’
int -> 0
float -> 0.0F或0.0f
double -> 0.0或0.0D(d)
long -> 0L或0l
数组 -> null

4.2 构造方法
✦构造方法名必须与类名相同
✦构造方法没有返回值类型声明
✦每个类中至少有一个构造方法,若没定义编译器将自动生成一个无参的构造方法
✦构造方法重载可采用换参、修改方法代码块实现,满足更丰富的实际需求

4.3 this关键字(表示当前对象的引用)
✦调用本类属性
✦调用本类方法

5 对象

5.1 对象的创建

类名 对象名 = new 类名()// 再次注意,如果是有参的构造函数,()内应传对应的参数

5.2 匿名对象

new 类名();
new Person().getPerson();

由于匿名对象不会有任何的栈空间所指向,所以使用一次后就称为垃圾空间

5.3对象的产生

✦为对象开辟内存
✦调用合适的构造参数

6 static 关键字

6.1 static 变量

为了便于区别理解。static又称为类属性,是一种共享属性。
我们描述类的属性时,一般采用实例变量(顾名思义,只有在进行实例化后才能使用)

未经实例化的实例变量报错,提示可令age变为static属性。因为static修饰的变量在实例化之前,不受对象实例化控制。

6.2 static方法
✦类似的,被static修饰的方法可以直接通过类名访问,不受实例化控制
✦所有的static方法不允许调用非static定义的属性和方法
✦所有的非static方法允许访问static属性或方法
(你可以来找我帮忙,但我只会找我的同类帮忙)

6.3 静态代码块

static{
代码块
}

补一发小测试

public class Test {
    public Test(){
        System.out.println("我是构造函数");
    }
    static {
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是实例代码块");   //实例代码块无需关键字将代码写入{ }即可
    }

    public static void main(String[] args) {
        Test test = new Test(); 
    }
}

运行结果如下!
在这里插入图片描述
在实例化的时候,静态代码块被优先执行,其次是实例代码块,最后才是构造函数

7 内部类

7.1 实例内部类
✦实例内部类中一般不能存在static修饰的变量和方法(除非又被final修饰,被final所修饰的变量在编译过程中就已经被确定)
✦只有先创建了外部类,才能创建内部类
✦实例内部类有外层内部类的this引用

以下的代码用于初步了解实例内部类

class Outter{
    public void show(){
        Inner in = new Inner(); //在外部类的内部创建内部类的对象,正常创建
        in.display();
    }
    class Inner{
        public void display(){
            System.out.println("找到我了");
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Outter out = new Outter();
        out.show();
        Outter.Inner inner = new Outter().new Inner (); //在使用内部类时创建内部类对象的格式
        inner.display();
    }
}

7.2 静态内部类
被static所修饰的类叫做静态内部类。类比被static修饰的静态变量。
✦静态内部类的创建不需要依赖外部类
✦静态内部类不可以使用外部的非static修饰的变量名或方法
在这里插入图片描述
如图,str因为被static所修饰,所以静态内部类可以使用
而 show方法没有被static所修饰,所以不能被静态内部类对象所调用

7.3 方法内部类

✦顾名思义是定义在外部类方法里面的类,出了该方法就会失效
✦除了创建这个类的方法可以访问,其他地方不允许访问。
✦方法内部类不允许被访问权限修饰符修饰(public\private等都不行)
✦可以引用方法形参。此形参需声明为final

7.4匿名内部类

✦就是没有名字的方法内部类
✦匿名内部类必须实现一个接口或继承一个抽象类
✦匿名内部类中不能存在任何静态成员或者方法
✦可以引用方法形参。此形参需声明为final

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值