面向对象:对象的创建和使用

目录

一、类和对象的基本概念

1.概述

2.类定义

3.创建对象

二、类的基本组成

1.成员变量

2.成员方法

3. 可变参数

(1)基本概念

(2)基本语法

(3)案例

(4) 注意事项和使用细节

4. 作用域

(1)基本使用

(2) 注意事项和细节使用

4 .构造器


一、类和对象的基本概念

1.概述

类是现实世界中一类具有共同属性和行为的事物的抽象。

可以认为类是一种数据结构,用属性来表示一类事物的共同特征,方法来表示这类事物的行为.。类是抽象的,对象是具体的。eg.游戏是抽象的,永劫无间是具体的。

2.类定义

修饰符 class 类名{
// 此处的修饰符仅可为 public或者默认修饰符
    属性 ...
    行为 ...}

3.创建对象

通过new关键字进行对象的创建、

eg.

public class DemoTest{
    public static void main(String []args){
    Demo demo = new Demo();
    }
}

class Demo{
}

二、类的基本组成

1.成员变量

1)访问修饰符:用来控制访问权限的标识符

同类中同一个包下不同包下的子类不同包下非子类
public

✔️

✔️

✔️

✔️

protected

✔️

✔️

✔️

默认修饰符(什么都不写)

✔️

✔️

private

✔️

2)成员变量和局部变量

成员变量定义在类中方法外

局部变量定义在类中方法内或代码块内

a.成员变量不赋值有初始值,局部变量不赋值无初始值,需先赋值后使用。

b.成员变量可以用访问修饰符修饰,局部变量不能使用访问修饰符修饰。

c.成员变量随着对象的创建而创建,随着对象的销毁而销毁。局部变量随着方法的调用而创建,随着方法调用结束而销毁。

d.局部变量可以和成员变量重名,在访问时遵循就近原则

3)类变量       

此类的所有对象共享的变量,定义格式为 

定义格式
static 访问修饰符 数据类型 变量名;
或
访问修饰符 static 数据类型 变量名;

调用
类名.变量名
对象名.变量名

2.成员方法

1)成员方法的定义和调用

访问修饰符 返回值类型 变量名(参数列表){
    方法体}
调用:
对象名.方法名()
注意:先创建对象,后调用方法



2)  类方法的定义和调用

访问修饰符 static 返回值类型 方法名(参数列表){
    方法体}
调用:
类名.方法名()
对象名.方法名()

3)方法重载和重写

方法重载:在同一个类中多个重名但参数列表不同的方法

方法重写:发生在父子类中,子类对父类方法实现的改写。

方法名参数列表访问修饰符返回值、抛出的异常
重载必须相同不同无要求无要求
重写必须相同相同不能缩小父类的访问权限是父类返回值(抛出的异常)的子类或者相同

3. 可变参数

(1)基本概念

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

(2)基本语法

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

(3)案例

public class VarParameter01 {
//编写一个 main 方法
public static void main(String[] args) {
HspMethod m = new HspMethod();
System.out.println(m.sum(1, 5, 100)); //106
System.out.println(m.sum(1,19)); //20
}
}
class HspMethod {
//可以计算 2 个数的和,3 个数的和 , 4. 5, 。。
//可以使用方法重载
// public int sum(int n1, int n2) {//2 个数的和
// return n1 + n2;
// }
// public int sum(int n1, int n2, int n3) {//3 个数的和
// return n1 + n2 + n3;
// }
// public int sum(int n1, int n2, int n3, int n4) {//4 个数的和
// return n1 + n2 + n3 + n4;
// }
//..... //上面的三个方法名称相同,功能相同, 参数个数不同-> 使用可变参数优化
//1. int... 表示接受的是可变参数,类型是 int ,即可以接收多个 int(0-多)
//2. 使用可变参数时,可以当做数组来使用 即 nums 可以当做数组
//3. 遍历 nums 求和即可
public int sum(int... nums) {
//System.out.println("接收的参数个数=" + nums.length);
int res = 0;
for(int i = 0; i < nums.length; i++) {
res += nums[i];
}
return res;
}
}

(4) 注意事项和使用细节

public class VarParameterDetail {
//编写一个 main 方法
public static void main(String[] args) {
//细节: 可变参数的实参可以为数组
int[] arr = {1, 2, 3};
T t1 = new T();
t1.f1(arr);
}
}
class T {
public void f1(int... nums) {
System.out.println("长度=" + nums.length);
}
//细节: 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
public void f2(String str, double... nums) {
}
//细节: 一个形参列表中只能出现一个可变参数
//下面的写法是错的. // public void f3(int... nums1, double... nums2) {
// }
}

4. 作用域

(1)基本使用

public class VarScope {
//编写一个 main 方法
public static void main(String[] args) {
}
}
class Cat {
//全局变量:也就是属性,作用域为整个类体 Cat 类:cry eat 等方法使用属性
//属性在定义时,可以直接赋值
int age = 10; //指定的值是 10
//全局变量(属性)可以不赋值,直接使用,因为有默认值,
double weight; //默认值是 0.0
public void hi() {
//局部变量必须赋值后,才能使用,因为没有默认值
int num = 1;
String address = "北京的猫";
System.out.println("num=" + num);
System.out.println("address=" + address);
System.out.println("weight=" + weight);//属性
}
public void cry() {
//1. 局部变量一般是指在成员方法中定义的变量
//2. n 和 name 就是局部变量
//3. n 和 name 的作用域在 cry 方法中
int n = 10;
String name = "jack";
System.out.println("在 cry 中使用属性 age=" + age);
}
public void eat() {
System.out.println("在 eat 中使用属性 age=" + age);
//System.out.println("在 eat 中使用 cry 的变量 name=" + name);//错误
}
}

(2) 注意事项和细节使用

 

//编写一个 main 方法
public static void main(String[] args) {
Person p1 = new Person();
/*
属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁。
局部变量,生命周期较短,伴随着它的代码块的执行而创建,
伴随着代码块的结束而销毁。即在一次方法调用过程中
*/
//p1.say();//当执行 say 方法时,say 方法的局部变量比如 name,会创建,当 say 执行完毕后
//name 局部变量就销毁,但是属性(全局变量)仍然可以使用
//
T t1 = new T();
t1.test(); //第 1 种跨类访问对象属性的方式
t1.test2(p1);//第 2 种跨类访问对象属性的方式
}
}
class T {
//全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)
public void test() {
Person p1 = new Person();
System.out.println(p1.name);//jack
}
public void test2(Person p) {
System.out.println(p.name);//jack
}
}
class Person {
//细节: 属性可以加修饰符(public protected private..)
// 局部变量不能加修饰符
public int age = 20;
String name = "jack";
public void say() {
//细节 属性和局部变量可以重名,访问时遵循就近原则
String name = "king";
System.out.println("say() name=" + name);
}
public void hi() {
String address = "北京";
//String address = "上海";//错误,重复定义变量
String name = "hsp";//可以
}
}

4 .构造器

1)无参构造器

访问修饰符 类名(){
方法体;}
// 创建对象时,由系统调用

2)有参构造

访问修饰符 类名(参数列表){
方法体}

3)this关键字

用于表示当前对象的引用

class A{
    String name;
    int age;
// 无参构造器
    A(){
    this(" ", 17);
// 可以使用this(参数列表)访问本类的其他构造器,使用必须放在构造器的第一行
}
    A(int age, String name){
    this.name = name;
    this.age = age;
// 此处,局部变量name和age与成员变量名相同,如果想为成员变量赋值,可以使用this表示当前对象引用
    }
}

4)IDEA快捷键Alt+Insert 

 5)注意事项

a.不提供构造器,系统提供默认的无参构造方法。

b.一旦提供了有参构造方法,就会覆盖系统提供的无参构造器,需要手动创建无参构造器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值