Java笔记 面向对象上

这篇博客详细介绍了Java中的类与对象的关系,包括创建对象、内存解析、JVM内存图以及面向对象编程的基本规则。讲解了成员变量与局部变量的区别、方法的定义和重载、构造方法的使用,同时也探讨了值传递机制。此外,还提到了匿名对象的概念和Java中万物皆对象的思想,强调了类的结构如变量、方法和构造方法的重要性。
摘要由CSDN通过智能技术生成

目录

1.类与对象的关系

2.面向对象的规则

4.对象的创建与对象内存解析

 5.JVM内存图

6.匿名对象

7.万事万物皆对象

类的结构之一:变量

1.成员变量 VS 局部变量(非static)

 1.1 相同点:定义变量的格式相同

 1.2 不同点:

2.变量的分类

        类的结构之二:方法

1.方法的定义

2.方法的书写规则

3.方法的注意事项

4.方法的重载

5.方法中的形参个数

6.值传递机制

 类的结构之三:构造方法

1.构造方法的作用:(只要造对象就得用构造方法)

2.构造方法使用说明


面向对象与面向过程区别

面向过程:C语言,具体的功能.最小动作是函数

面向对象: java.具有功能的对象.最小动作是方法

1.类与对象的关系

类:是对一类事物的具体描述、是抽象的。概念上的定义

对象:是该类事物的每个个体。称为实例

两者的关系,对象是类new出来的

2.面向对象的规则

1.创建类、设计类的成员。

2.创建类的对象。

3.给对象的属性和结构进行赋值操作、使得对象有意义

4.对象的创建与对象内存解析

   
   Person p1 = new Person();  
   Person s2;
   s2 = p1;    

   Person p2 = new Person();
   
   引用类型 变量名 = new 引用类型();
   //左边对象的引用  // 右边就是对象
   

对象的引用:右边new操作表示从堆空间中new出来一个对象,左边在栈空间创建一个引用变量指向对象的地址。一个对象引用可以指向一个对象。多个对象引用也可以指向一个对象。它们的引用地址一样。

 5.JVM内存图

编译完源程序以后,生成一个或多个字节码文件。我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行。意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。

虚拟机栈:即为平时提到的栈结构。我们将局部变量存储在栈结构中

虚拟机堆:我们将new出来的结构(比如:数组、对象)加载在堆空间中。

补充:对象的属性(非static的)加载在堆空间中。

方法区:类的加载信息、常量池、静态域

6.匿名对象

匿名对象就是没有把对象的地址值赋给变量、显示的调用。

特点:匿名对象只能调用一次

public class Test{
      public static void main(String[] args){ 
        new Person().Say();
        new Person().age = 10;
        new Person().name = "刘星";
   }
}

class Person{
   int age;
   String name;
   publci void Say(){
   System.out.println("hello world");   
 }
}

7.万事万物皆对象

在Java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构

  • Scanner,String等
  • 文件:File
  • 网络资源:URL

涉及到Java语言与前端HTML、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象。

类的结构之一:变量

1.成员变量 VS 局部变量(非static)

 1.1 相同点:定义变量的格式相同

               数据类型 变量名 = 变量值;

               先声明、后使用、变量都在对应的作用域中

 1.2 不同点:

1.2.1 在类中声明的位置是不一样的

  • 成员变量在类的内部{ };
  • 局部变量在方法中、构造方法中、以及方法和构造方法的形参列表中、代码块内。

1.2.2 作用的范围不一样

  • 成员变量在类里面是灵活的。可以在被方法直接调用。
  • 局部变量只能在方法中、构造方法中、代码块中别调用。作用范围是比较小的

1.2.3 默认初始化值

     成员变量有默认初始化值

  • 整型 byte short int long : 0
  • 浮点型 float double :0.0
  • 字符型 char: 0 或者“u\0000”
  • 布尔型 boolean: false
  • 引用变量类型 数组、接口、类:null
  • 局部变量:没有默认初始值

    意味着,我们在调用局部变量之前,一定要显示赋值。特别地,形参在调用时,我们赋值即可

1.2.4 内存加载不一样

  • 局部变量加载到栈内存
  • 成员变量加载到堆内存

1.2.5 权限修饰符不一样

  •  成员变量:可以使用权限修饰符(public 缺省 protected private) 修饰 (为了体现封装性)
  •  局部变量:不可以使用权限修饰符

2.变量的分类

  2.1.类中声明的位置分类

 2.2 基本数据类型分类

类的结构之二:方法

1.方法的定义

  • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中 也称为函数或过程。 
  • 将功能封装为方法的目的是,可以实现代码重用,简化代码 
  • Java里的方法不能独立存在,所有的方法必须定义在类里。

2.方法的书写规则

权限修饰符 返回值类型 方法名(形参列表){
    方法体
}

3.方法的注意事项

3.1 权限修饰符

  • 方法可以使用private 缺省 public protected 作为方法的修饰符

3.2 方法的返回值类型

     如果方法的返回值类型是void,则不需要返回具体的数或对象,可以没有return关键字,如果有return关键字的话,也仅仅代表着方法的结束。

    如果方法的返回值类型不是void,则需要返回具体的数或者对象,必须要有return关键字返回具体类型的常量或变量。return 数据。

3.3 方法的限制

方法被调用一次,就会执行一次。

定义方法时,方法的结果应该返回给调用者,交由调用者处理。

方法中只能调用方法或属性,不可以在方法内部定义方法。

4.方法的重载

重载的定义:在同一个类中允许存在一个以上的同名方法,必须方法名相同,形参列表不同。

两同一不同 :同一个类,同一个类名,形参列表不相同。与权限修饰符、返回值类型没有任何关系。判断重载时,牢记两同一不同。

public int sum(int x, int y){
  return x + y;
}

public double sum(int x,double y){
  return x + y;
}

public double sum(int x, long y){
   return x + y;
}

5.方法中的形参个数

方法中的形参个数根据自己的方法需要,进行设计。可以为0个,也可以为多个。具体情况,具体分析。

方法中的可变形参:JDK5.0以前,多个同类型的参数一起传入是用数组的形式。JDK5.0以后,采用可变个数形参往里传入值。

注意事项

1. 声明格式:方法名(参数的类型名 ...参数名)

2. 可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个

3. 可变个数形参的方法与同名的方法之间,彼此构成重载

4. 可变参数方法的使用与方法参数部分使用数组是一致的

5. 方法的参数部分有可变形参,需要放在形参声明的最后

6. 在一个方法的形参位置,最多只能声明一个可变个数形参

public void show(int i){

}

public void show(String s){
    System.out.println("show(String)");
}

public void show(String ... strs){
    System.out.println("show(String ... strs)");

    for(int i = 0;i < strs.length;i++){
        System.out.println(strs[i]);
    }
}
// 不能与上一个方法同时存在
//  public void show(String[] strs){
//      
//  }
// 调用时:可变形参与数组类似
test.show("hello");
test.show("hello","world");
test.show();

test.show(new String[]{"AA","BB","CC"});

6.值传递机制

  • 形参:方法声明时的参数
  • 实参:方法调用时实际传给形参的参数值

Java的实参值如何传入方法呢? Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本 (复制品)传入方法内,而参数本身不受影响。

  • 形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
  • 形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形
  • 基本数据类型传递的是数值
  • 引用数据类型传递的是地址值
System.out.println("***********基本数据类型:****************");
int m = 10;
int n = m;

System.out.println("m = " + m + ", n = " + n);

n = 20;

System.out.println("m = " + m + ", n = " + n);

System.out.println("***********引用数据类型:****************");

Order o1 = new Order();
o1.orderId = 1001;

Order o2 = o1;//赋值以后,o1和o2的地址值相同,都指向了堆空间中同一个对象实体。

System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

o2.orderId = 1002;

System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " +o2.orderId);

类的结构之三:构造方法

1.构造方法的作用:(只要造对象就得用构造方法)

  • 创建对象
  • 初始化对象的信息

2.构造方法使用说明

  • 如果没有显示的定义一个带参的构造方法,系统会默认造一个无参的构造方法。
  • 如果一旦定义了一个带参的构造方法。系统不会创建无参的构造方法。假设创建对象时,没有初始化对象的信息,就会报错。
  • 创建格式 返回值类型 类名(形参列表){    方法体 }
  • 一个类中如果定义多个构造器,则构成构造器的重载。构造方法名相同,形参列表不同。
//构造器不等于方法
public Person(){
    System.out.println("Person().....");
}
public Person(String n){
    name = n;

}
public Person(String n,int a){
    name = n;
    age = a;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值