Java面向对象

面向对象编程(基础部分)


类与对象

  1. 类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型.
  2. 对象是具体的,实际的,代表一个具体事物, 即是实例.
  3. 类是对象的模板,对象是类的一个个体,对应一个实例

字符串本质上是一个引用类型,按照jvm的规则会把字符串放在方法区的常量池中间。

栈中的是对象引用(对象名),实际上的对象在堆中。

// 创建Person 对象
// p1 是对象名(对象引用)
// new Person() 创建的对象空间(数据) 才是真正的对象
Person p1 = new Person();
// 对象的属性默认值,遵守数组规则:

对象

  1. 先声明再创建
   Cat cat ; //声明对象cat
   cat = new Cat(); //创建
  1. 直接创建
   Cat cat = new Cat();

访问属性

对象名.属性名;

cat.name ;
cat.age;
cat.color;
Person p1=new Person0;
p1.age=10;
p1.name="小明";
Person p2=p1;//把p1赋给了p2,让p2指向p1
System.out.println(p2.age);

核心:引用传递传递的是地址。



方法

在某些情况下,我们要需要定义成员方法(简称方法)。

  1. 提高代码的复用性
  2. 可以将实现的细节封装起来,然后供其他用户来调用即可
访问修饰符 返回数据类型 方法名(形参列表..{//方法体
    语句;
    return 返回值;
}
// 如果方法是void,则方法体中可以没有return 语句,或者只写return;

访问修饰符(作用是控制方法使用的范围)

如果不写默认访问,[有四种: public, protected, 默认, private]

方法不能嵌套定义!


传参

基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!

引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

栈的值是地址,改的时候修改的是对应堆中的值。


递归

1.执行一个方法时,就创建一个新的受保护的独立空间(钱空间)

2.方法的局部变量是独立的,不会相互影响,比如n变量

3.如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据。

4.递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError

5.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁


重载(OverLoad)

java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!

1)方法名: 必须相同

2)形参列表: 必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)

3)返回类型: 无要求


可变参数

java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现

访问修饰符返回类型方法名(数据类型... 形参名) {
}

1)可变参数的实参可以为0个或任意多个。

2)可变参数的实参可以为数组。

3)可变参数的本质就是数组。

4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

5)一个形参列表中只能出现一个可变参数

public void f3(int... nums1, double... nums2)X错误)



作用域

1.在java编程中,主要的变量就是属性(成员变量)局部变量

2.我们说的局部变量一般是指在成员方法中定义的变量

3.java中作用域的分类

全局变量:也就是属性,作用域为整个类体

局部变量:也就是除了属性之外的其他变量,作用域为定义它的代码块中

4.全局变量(属性)可以不赋值,直接使用,因为有默认值,局部变量必须赋值后,才能使用,因为没有默认值。

注意

1.属性和局部变量可以重名,访问时遵循就近原则。

2.在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名。

3.属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。局部变量,生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁。

4.作用域范围不同

全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)

局部变量:只能在本类中对应的方法中使用

5.修饰符不同

全局变量/属性可以加修饰符

局部变量不可以加修饰符



属性/成员变量/字段

成员变量 = 属性 = field(字段) (即成员变量是用来表示属性的,统一叫属性)

class Car {
    String name;//属性, 成员变量, 字段field
    double price;
    String color;
    String[] master;//属性可以是基本数据类型,也可以是引用类型(对象,数组)
}

属性是类的一个组成部分,一般是基本数据类型, 也可是引用类型(对象,数组)。

注意事项

属性的定义语法同变量,示例:访问修饰符属性类型属性名;

属性如果不赋值,有默认值,规则和数组一致。



构造方法/构造器

构造方法又叫构造器(constructor),是类的一种特殊的方法,它的主要作用是完成对新对象的初始化。

[修饰符] 方法名(形参列表){
    方法体;
}
  1. 构造器的修饰符可以默认, 也可以是public protected private
  2. 构造器没有返回值
  3. 方法名和类名字必须一样
  4. 参数列表和成员方法一样的规则
  5. 构造器的调用, 由系统完成

注意事项

1.一个类可以定义多个不同的构造器,即构造器重载

比如:我们可以再给Person类定义一个构造器,用来创建对象的时候,只指定人名,不需要指定年龄。

2.构造器名和类名要相同

3.构造器没有返回值

4.构造器是完成对象的初始化,并不是创建对象

5.在创建对象时,系统自动的调用该类的构造方法

6.如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造器(也叫默认构造器). 比如Dog(){}

7.一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显式的定义一下,即:Dog(){}



this 关键字

java虚拟机会给每个对象分配this, 代表当前对象。

this.name 就是当前对象属性name

隐藏的this指向自己的堆地址。

this 的注意事项

  1. this 关键字可以用来访问本类的属性、方法、构造器

  2. this 用于区分当前类的属性和局部变量

  3. 访问成员方法的语法:this.方法名(参数列表);

  4. 访问构造器语法:this(参数列表); 注意只能在构造器中使用(即只能在构造器中访问另外一个构造器, 必须放在第一条语句)

  5. this 不能在类定义的外部使用,只能在类定义的方法中使用




javap的使用

javap是JDK提供的一个命令行工具,javap能对给定的class文件提供的字节代码进行反编译。 通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作。

javap <options> <classes>
javap -c -v 类名
  -help  --help  -?        输出此用法消息
  -version                 版本信息
  -v  -verbose             输出附加信息
  -l                       输出行号和本地变量表
  -public                  仅显示公共类和成员
  -protected               显示受保护的/公共类和成员
  -package                 显示程序包/受保护的/公共类
                           和成员 (默认)
  -p  -private             显示所有类和成员
  -c                       对代码进行反汇编
  -s                       输出内部类型签名
  -sysinfo                 显示正在处理的类的
                           系统信息 (路径, 大小, 日期, MD5 散列)
  -constants               显示最终常量
  -classpath <path>        指定查找用户类文件的位置
  -cp <path>               指定查找用户类文件的位置
  -bootclasspath <path>    覆盖引导类文件的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值