《嗨 Java》第二章:类型与方法

变量与常量

变量

变量就是可以更改内容的箱子,变量一般也叫左值。

变量的几种分类

  1. 普通成员变量
  2. 静态成员变量
  3. 局部变量

常量

常量就是一个封闭的箱子里面存放的东西无法再更改,常量通常也叫右值。

常量的几种分类

  1. 字面常量
  2. final修饰的常量

类型

Java中的类型是强类型,类型之间不能直接赋值,同时定义一个变量时必须初始化。

Java中当一个值超过了该类型的最大表示范围那么会报错。

字节类型变量

Java中存在一个字节的类型,不过该类型是整型的一种。

byte a = 10;

短整型变量

Java中的短整型为两个字节。

short a = 10;

整型变量

Java中的整型占四个字节

int a = 10;

长整型变量

Java中的长整型占8个字节

long a = 10;

单精度浮点型变量

Java中单精度浮点型占4个字节

float a = 1.4f;//注意字面小数默认是双精度浮点型

双精度浮点型变量

Java中双精度浮点型占8个字节。

double a = 3.5;

字符类型变量

Java中字符型占2个字节。

char ch = '我';//可以存放一个中文

布尔型变量

Java中布尔型变量占几个字节没有规定,但是布尔类型只能表示两个值truefalse

boolean a = true;

注意:Java中只能低字节类型能给高字节类型,如果想让高字节类型给低字节类型需要用强制类型转换,不过强制类型转换存在风险。

方法

什么是方法?

Java当中的方法其实就是C语言中的函数,只是叫法不同本质是一样的。

方法的定义

方法定义:public staic 返回值类型 方法名(参数列表) {方法体};

实列:

public static int add(int a, int b) {
    return a + b;
}

值传递和引用传递

值传递

Java中没有地址的概念所以任何在栈上开辟的对象在传参时都只会作为值传递,值传递是一种拷贝形参的改变不会对实参有任何影响。

引用传递

Java中的引用传递形参是可以影响到实参的因为引用传递本质就是传递实参本身而不是拷贝。

Java中什么情况下才是引用传递呢?当一个对象是从堆上开辟的空间做为参数传递时就是引用传递。

方法重载

有时候有些函数功能一样但是针对不同类型的类型不一样,我们又想用同一个方法名这时我们可以用方法重载。

方法重载规则

  1. 方法名相同
  2. 类型或参数个数不同

实列:

public static int add(int a, int b) {
    return a + b;
}

public static double add(double a, double) {
    return a + b;
}

值传递

Java中的值传递其实是一种“拷贝”,它会把实参传递的数据拷贝一份并压进调用方法的战帧中,而这时的参数不会影响到实参同时这个栈帧被销毁时该参数也会随之消亡。

当实参传递的数据不是堆上开辟的空间生命周期都会受到影响。

引用传递

引用传递传递的是数据地址,虽然Java中没有地址的概念但是引用变量定义是底层是存放数据地址来保证索引到数据同时保存在堆上。

引用传递也不列外在做为实参传递给方法形参时也是一种拷贝,不过拷贝的数据是一段地址所以形参对该地址存放的数据进行修改都会影响到实参,因为该地址存的数据是在堆上开辟的空间。

递归

递归是通过自己调用自己来完成某项任务,再递归调用的途中,任务会从大变小直到小到不能再分配才执行任务,而这时执行的任务量会变的无比小,虽然任务量变小了但是在栈上的空间消耗也变大,因为有很多没用的重复指令一直被递归分解。

这也是为什么递归处理大型计算任务时会变的巨慢无比,迭代能一秒计算出来的数据递归可能要花上一个小时甚至更久……

能用递归完成的任务绝大部分都能迭代完成,所以一般是能用迭代绝对不用递归。

递归的优点

  • 递归代码简单
  • 代码量少

递归的缺点

  • 栈的空间消耗大
  • 冗余数据过多
  • 计算大型任务效率极低

数组

Java中的数组就是一段连续的空间存放相同类型的值,Java中数组开辟的空间是在堆上开辟而不是栈上,所以Java中的数组变量也叫引用变量。

数组的定义

定义语法: 类型[] 变量名;

列子:

int[] arr = { 1, 2, 3 };

数组的初始化方式

Java中数组初始化有两种方式:

  1. new 类型;
  2. { 数据 };

例子:

int[] arr1 = { 1, 2, 3, 4 };
int[] arr2 = new int[1];

多维数组

二维数组定义

Java中的二维数组和C语言大同小异,唯一的区别是{}内没初始化数据时,Java不能省略第一个[]的数据。

例子:

int[3][] arr1 = { {12}, {3}, {4} };
int[][] arr2 = { {1}, {2}, {3} };

不规则数组

Java中数组的如果没指定最后一个[]内的数据时,在赋值时每个int[]类型都可以是不同。

列子:

int[3][] arr = { {1, 2, 3, 4, 5}, {5}, {3, 4, 5}};
  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值