java中类、方法、对象的概念

类、方法、对象

1、类

1.1 类的理解

  • 相同事物共同特征的描述,类只是学术上的一个概念并非真实存在的,只能描述一类事物

  • 可以把类理解成一个对象的抽象,这个抽象的对象包含了变量(用来描述这个对象的属性)和方法(用来描述这个对象可以干什么),类中的各个成员之间可以相互调用(static修饰的成员不能访问没有static修饰的成员).

  • 而每个类中又必须有一个或者多个构造方法,这个构造方法用来将这个抽象的对象实例化

1.2 类的定义

定义格式

修饰符 class 类名{
		1.成员变量(Field):  	描述类或者对象的属性信息的。
        2.成员方法(Method):		描述类或者对象的行为信息的。
		3.构造器(Constructor):	 初始化一个对象返回。
		4.代码块
		5.内部类
	  }
//类名的首字母建议大写,满足驼峰模式,比如 StudentNameCode
public class 类名{
        //成员变量
        int weight=100//成员方法
        修饰符 返回类型 方法名(参数类型 参数名) {
            执行语句
            return 返回值
        }
        public void eat(){
            System.out.println(“吃饭”)}
}

1.3 类的性质

类的三大特性

  • 封装性
    将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。
  • 继承性
    继承性更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。
  • 多态性
    同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向父类(基类)的指针,来调用实现子类(派生类)中的方法

2、对象

2.1 什么是对象

  • 对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
  • 对象就是类的具体实例

2.2如何创建对象

  • 通过new关键字来创建对象
    类名 对象名=new 类名();
  • 使用new关键字创建的时候,除了分配内存空间外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用

3、方法

3.1方法的定义

定义格式:

//成员方法
修饰符 返回类型 方法名(参数类型 参数名) {
        方法体
        return 返回值;
}
public void eat(){
		System.out.println(“吃饭”)}
  • 修饰符:方法的修饰符比较多,有对访问权限进行限定的public,private,protect,有静态修饰符static,还有最终修饰符final等
  • 返回值类型:用于限定方法返回值的数据类型
  • 方法名:调用方法时候使用的标识
  • 参数类型:用于限定调用方法时传入参数的数据类型
  • 参数名:是一个变量,用于接收调用方法时传入的数据
  • 方法体:完成功能的代码块
  • return:如果方法操作完毕,有数据返回,用于把数据返回给调用者

如果方法操作完毕

  • void 类型的方法,直接调用即可,而且方法体中一般不写 return
  • 非 void 类型的方法,推荐用变量接收调用

原理:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用完毕之后,会从栈内存中弹栈消失

3.2方法的调用

  1. 静态方法调用
  • 静态方法就是用static修饰的方法,静态方法的调用是通过类名来调用的也可以通过对象来调用,格式如下
    类名.方法名();
  • 如果用静态方法调用非静态方法只能通过实例化类通过对象调用
//学生类
public class Student(){
          //静态方法
     public static void say(){
           System.out.println("说话");
  } 
}
//测试类
public class Test(){
 public static void main (String[] args){
         Student.say()
   }
}

  1. 非静态方法的调用
  • 非静态方法就是没有用static修饰的方法,非静态方法的调用是通过对象来调用的,格式如下:
    对象名.方法名();
  • 非静态方法调用静态方法可以通过类名来调用的也可以通过对象来调用
//学生类
public class Student(){
         //非静态方法
     public void say(){
           System.out.println("说话");
  } 
}
//测试类
public class Test(){
 public static void main (String[] args){
   /*
   我们需要实例化这个类(得到一个对象)
   格式:类名 对象名 = new 类名();
   */
     Student student = new Student();
       student.say();
     
     
   }
}
  1. 类中方法调用方法
  • 下列代码中方法a和方法b之间可以直接调用,方法c和方法d之间也可以直接调用说明在同一个类中静态方法可以直接调用静态方法非静态方法可以直接调非静态方法,但是两个静态或者非静态方法之间不能相互的去调用(就是不能在方法a中调用方法b再在方法b中调用方法a)
  • 非静态方法也可以直接调用静态方法,列如下面代码方法b可以直接调用方法c
  • 静态方法不能直接调用非静态方法,列如下面代码中不能用方法d直接去调用方法a,但是可以实例化Test类,通过对象来调用(因为用static修饰的方法是和类一起加载的,而非静态方法是在类实例化后加载的)
public class Test(){
//类实例化后加载的
  public  void a(){
     b();
  }
  public  void b(){
     c();
  }
  //和类一起加载的
  public static void c(){
       d();
       
  }
  public static void d(){
  //a();这是不行的
  Test test = new Test();
     test.a();
  }

}

总结下来就是:

  • 1.)在同一个类中静态方法可以直接调用静态方法,通过实例化对象调用非静态方法
    原因是因为用static修饰的方法是和类一起加载的,而非静态方法是在类实例化后加载的
    2.)在同一个类中非静态方法既可以直接调用静态方法和非静态方法也可以用通过实例化调用调用静态方法和非静态方法
  • 1.)在不同的类中静态方法可以通过类名.方法名或对象名.方法名调用另一个类中的静态方法,只能通过实例化对象调用非静态方法
    2.)在不同类中非静态方法可以通过类名.方法名或对象名.方法名调用另一个类中的静态方法,只能通过实例化对象调用非静态方法

3.3 方法的形参和实参

形式参数与实际参数的数据类型要一致才能将实参传给形参

public class Test(){
 public static void main (String[] args){
    int result=Test.add(1,2);//实际参数
     System.out.println(result);
 }
   public static int add(int a,int b){//形式参数
          return a+b;
  }
  //输出结果为 3

3.4值传递和引用传递

值传递:传递对象的一个副本,即使副本被改变,也不会影响源对象,因为值传递的时候,实际上是将实参的值复制一份给形参

//值传递
//
public class Test(){
 public static void main (String[] args){
      int a=1;//实际参数
      System.out.println(a);//输出1
      Test.add(a);
      System.out.println(a);//输出还是1
 }
 //这里返回值为空
   public static void add(int b){//形式参数
         b=100;
  }
 }

引用传递:传递的并不是实际的对象,而是对象的引用,外部对引用对象的改变也会反映到源对象上,因为引用传递的时候,实际上是将实参的地址值复制一份给形参。

//引用传递 对象,本质还是值传递
public class Demo3 {
    public static void main(String[] args) {
        Human man=new Human();
        System.out.println(man.name);
        change(man);
        System.out.println(man.name);
        
    }
                                    //这个只是一个变量名
    public static void change(Human woman){
      woman.name="李四";
      //对象.name
    }
}
//定义了一个human类,具有name这个属性
class Human{
    String name="张三";
    //属性:字段
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值