JAVA学习1-数据类型、成员变量、静态、this、递归、构造方法、重载、方法

1.数据类型:

八大基本数据类型:byte,short,int,long,boolean,char,float,double

引用数据类型

2.方法

[修饰符列表] [返回值类型] [方法名](形参列表){
    函数体
}

public static void main(String[] args) {
        
        //77L,56 实参
        Test.sum(77L, 56);
}

//long x,long y 行参
public static void sum(long x, long y) {

    System.out.println(x + y);

}

3.静态方法static

类名.xx()调用;

调用方法与被调用方法属于同一个类时,可以省略类名

public static void sum(long x, long y) {

  System.out.println(x + y);
  Test.doSome();
  doSome();

}

public static void doSome() {
     System.out.println("dosome");
}

 静态方法调用与引用无关,无论引用是什么实际都是类调用

m2.seeMovie();
m2=null;
m2.seeMovie();

public class Movie {

    public static void seeMovie() {
        System.out.println("看电影");
    }
}

static{xxx}静态代码块,静态代码块在类加载时执行,静态代码块可以存在多个,并至上而下一次执行,可以在类加载时做一些日志记录。

public class Movie {
    static{
        System.out.println("静态代码块1");
    }
    static{
       System.out.println("静态代码块2");
    }
    static{
       System.out.println("静态代码块3");
    }
}

 大多数“工具类”的方法都是静态方法,因为工具类的方法不受调用对象的影响。

4.jvm主要的内存空间

方法区内存

堆内存

栈内存

方法在调用的时候才会分配栈内存空间,每个方法占用栈区的一个栈位。

.class字节码文件在类加载的时候将方法代码片段放到了方法区内存,方法代码片段只有一份,可以被反复调用,jvm调用方法区代码片段的时候,需要分配独立的活动场所,在栈内存空间中,此时发生压栈动作,方法执行完后,分配的栈内存空间全部释放,此时发生弹栈动作。

方法运行的时候,局部变量在栈内存空间中存储

对象存储在堆内存中

成员变量的静态变量(静态属性)存储在方法区内存当中

5.方法重载

功能相似的时候,方法名可以相同,此时区分方法不再依据方法名,而是参数

当一下条件满足一个的时候就构成方法重载:

a.参数数量不同

b.参数顺序不同

c.参数类型不同

class Test {
    public static void main(String[] args) {
        m1();
        m1(2);

        m2(1, 2.0);
        m2(21, 1.1);

        m3(22);
        m3(5.6);
    }

    // 参数数量不同
    public static void m1() {
        System.out.println("m1-1");
    }

    public static void m1(int a) {
        System.out.println("m1-2");
    }

    // 参数位置不同
    public static void m2(int a, double b) {
        System.out.println("m2-1");
    }

    public static void m2(double a, int b) {
        System.out.println("m2-2");
    }

    // 参数类型不同
    public static void m3(int a) {
        System.out.println("m3-1");
    }

    public static void m3(double a) {
        System.out.println("m3-2");
    }
}

6.递归

首先,递归非常消耗内存,只有在必须使用递归才能完成功能的时候用。

public static int recursion(int n) {
   if (n == 0) {
       return 0;
   } else {
       return n + recursion(--n);
   }
}

7.成员变量

方法体之外定义的变量称为成员变量,如果成员变量没有赋值,则系统默认赋值,一切向0看齐。

只能通过实例访问的成员变量称为实例变量,只有创建对象后,才会为实例变量分配内存空间,否则,实例变量是不存在的;

8.构造方法

实例是通过构造方法创建的,所以构造方法名需要与类名一致,返回值类型是类本身,构造方法不需要返回值类型

如果定义了一个有参数的构造方法,建议在类中重载一个无参数的方法,这样可以随时创建类的实例,如果没有无参数的构造方法可能出现子类无法创建的问题;

实例变量的默认值是在构造方法内赋值的

[修饰符列表] 方法名(参数列表){
    ...
}

public class Movie {

    public String name;
    String player;
    int year;

    public Movie(String nameParam){
        this.name=nameParam;
        System.out.println("构造方法");
    }
}

 构造方法中调用其他构造方法:

public class Movie {

    String name;
    String player;
    int year;

    public Movie() {
        //构造方法只能出现在构造方法的第一行
        this("色戒","梁朝伟",2001);
    }

    public Movie(String name,String player,int year) {
        this.name=name;
        this.player=player;
        this.year=year;
    }
}

9.this

this是实例内部的一个变量,保存了一个内存地址,这个内存地址指向了当前实例本身。

类内部this可以省略不写,但是不符合常规习惯,所以一般都写上this.。

this()语法只能出现在构造方法第一行,通过当前的构造方法去调用本类中其他构造方法,可以实现代码复用。

this只能出现在实例方法和构造方法中。

10.实例方法

需要当前实例参与的方法需要定义成实例方法,实例方法不能带static修饰符

实例代码块{xxx},实例代码块在实例创建的时候执行,可以存在多个,至上而下执行,并且在构造方法之前执行

public class Movie {
    {
        System.out.println("实例代码块1");
    }
    {
        System.out.println("实例代码块2");
    }
    {
        System.out.println("实例代码块3");
    }

    public Movie() {
        System.out.println("实例创建");
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

y_w_x_k

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

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

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

打赏作者

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

抵扣说明:

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

余额充值