方法与面向对象部分

方法:将具有独立功能的代码块组合为一个整体

定义格式:

访问权限修饰符 其他修饰符 返回值类型 方法名称(参数列表) {
 //方法体【函数体】 return 返回值;
 //如果返回值类型void ,可以不用写return 
 }

修饰符的访问权限

Java访问修饰符包括private,default,protected和public。含义分别表示私有的,默认的,受保护的和公有的访问修饰符。这些访问修饰符既可以修饰类中的属性,又可以修饰类中的方法,而public和default还可以修饰类。在同一个java文件里,公有类有且仅有一个,并且该文件命名为类名.java。

修饰符当前类相同包子类其他包

public

protected×
default××
private×××

方法的分类

  • 根据方法有没有参数,可分为:
  • 1.无参方法
  • 2.有参方法
  • 根据有没有返回值,可分为:
  • 1.无返回值方法
  • 2.有返回值方法

形参:方法定义中的参数,等同于变量定义格式,例如:int number

实参:方法调用中的参数,等同于使用变量或常量,例如:10 number

public class Demo{
    
//  1. 最简单的无参方法
    void sum1(){
        System.out.println("加法操作"); 
    }
//    2. 拥有修饰符的无参方法 
    public static void sum2(){ 
        System.out.println("加法操作");
    }
//    3. 拥有参数的方法
    public static void sum3(int a,int b){ 
        System.out.println("两数相加结果"+a+b); 
    }
//    4.拥有返回值的方法 
    public static int sum4(int a,int b){

        return a+b;
    }
//        5.声明一个无参数带返回值
    
    public static int sum5(){
        int x=20; 
        int y=28; 
        int z=x+y; 
        return z; 
    }
}

方法的重载

概念:

  • 同一个类中,方法名字相同,参数列表不同,则是方法重载。
  • 注意:
  • 参数列表的不同包括,参数个数不同,参数数据类型不同,参数顺序不同
  • 方法的重载与方法的修饰符和返回值没有任何关系
  • public class Demo {
    
        public static void main(String[] args) {
            show();
            show(10);
            show("10");
            show("10",10);
        }
        
        public static void show() {
            System.out.println("无参无返回值的show");
        }
        
        public static void show(int a) {
            System.out.println("int的show");
        }
        
        public static void show(String a) {
            System.out.println("String的show");
        }
        
        public static void show(String a,int b) {
            System.out.println("String int的show");
        }
        
    }
    
    无参无返回值的show
    int的show
    String的show
    String int的show

    面向对象部分

  • 三大思想
  • OOA:面向对象分析(Object Oriented Analysis)

    OOD:面向对象设计(Object Oriented Design)

    OOP:面向对象程序(Object Oriented Programming )

  • 类与对象
    类表示一个共性的产物,是一个综合的特征,而对象,是一个个性的产物,是一个个体的特征。 (类似生活中的图纸与实物的概念。)

    类必须通过对象才可以使用,对象的所有操作都在类中定义。

    类由属性和方法组成:

    属性:就相当于人的一个个的特征

    方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

    一个类要想真正的进行操作,则必须依靠对象,对象的定义格式如下:

    类名称 对象名称 = new 类名称() ;

    如果要想访问类中的属性或方法(方法的定义),则可以依靠以下的语法形式:

    访问类中的属性: 对象.属性 ;

    调用类中的方法: 对象.方法(实际参数列表) ;

    类必须编写在.java文件中;
    一个.java文件中,可以存在N个类,但是只能存在一个public修饰的类;
    .java文件的文件名必须与public修饰的类名完全一直;

    匿名对象

  • 没有对象名称的对象就是匿名对象。 即栈内存中没有名字,而堆内存中有对象。
  • 匿名对象只能使用一次,因为没有任何的对象引用,所以将称为垃圾,等待被GC回收。
  • 只使用一次的对象可以通过匿名对象的方式完成,这一点在以后的开发中将经常使用到。
  • public static void main(String[] args){
    	//Math2 m=new Math2();
    	//int num=m.sum(100,200);
    	//不通过创建对象名,直接实例对象调用,这就是匿名对象。因为没有对象名指向对象,所以只能调用一次,然后被GC回收。
    	int num = new Math().sum(100,200);
    	System.out.println(num);
    }
    class Math2{
    	int sum(int x,int y){
    		return x+y;
    	}
    }
    

    对象内存分析

     

    创建对象的内存分析

  • 栈(stack)

  • Java栈的区域很小 , 大概2m左右 , 特点是存取的速度特别快

    栈存储的特点是:先进后出

    存储速度快的原因:

    栈内存, 通过 ‘栈指针’ 来创建空间与释放空间 !

    指针向下移动, 会创建新的内存, 向上移动, 会释放这些内存 !

    这种方式速度特别快 , 仅次于PC寄存器 !

    但是这种移动的方式, 必须要明确移动的大小与范围 ,

    明确大小与范围是为了方便指针的移动 , 这是一个对于数据存储的限制, 存储的数据大小是固定的 , 影响了程序 的灵活性 ~

    所以我们把更大部分的数据存储到了堆内存中

    堆存储的是:

    基本数据类型的数据以及引用数据类型的引用!

    堆(heap)
     

  • 存放的是类的对象 ;

    Java是一个纯面向对象语言, 限制了对象的创建方式 :

    所有类的对象都是通过new关键字创建

    new关键字, 是指告诉JVM , 需要明确的去创建一个新的对象 , 去开辟一块新的堆内存空间:

    堆内存与栈内存不同, 优点在于我们创建对象时 , 不必关注堆内存中需要开辟多少存储空间 , 也不需要关注内存占用

    时长 !

    堆内存中内存的释放是由GC(垃圾回收器)完成的

    垃圾回收器回收堆内存的规则 :

    当栈内存中不存在此对象的引用时,则视其为垃圾 , 等待垃圾回收器回收 !

    包装类

    在Java中有一个设计的原则“一切皆对象”,那么这样一来Java中的一些基本的数据类型,就完全不符合于这种设计思想,因为Java中的八种基本数据类型并不是引用数据类型,所以Java中为了解决这样的问题,引入了八种基本数据类型的包装类。

  • 序号基本数据类型包装类
    1intinteger
    2charCharacter
    3floatFloat
    4doubleDouble
    5booleanBoolean
    6byteByte
    7shortShort
    8longLong

    以上的八种包装类,可以将基本数据类型按照类的形式进行操作。

    但是,以上的八种包装类也是分为两种大的类型的:

    Number:Integer、Short、Long、Double、Float、Byte都是Number的子类表示是一个数字。
    Object:Character、Boolean都是Object的直接子类。
    基本数据类型和包装类型的区别
    1、包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是
    2、包装类型是引用的传递,基本类型是值的传递
    3、声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间
    4、存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们
    5、初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null

    抽象类

    抽象类必须使用abstract class声明

    一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。

    格式:

    abstract class 类名{ // 抽象类 
    } 

    抽象方法

    只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关键字声明。

    格式:

    // 抽象类 
    abstract class 类名{ 
    	public abstract void 方法名() ; // 抽象方法,只声明而未实现
    }

    不能被实例化

    在抽象类的使用中有几个原则:

  • 抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。 不能被我们创建,但是jvm虚拟器可以创建。

  • 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值