一、数组

1、 什么是数组?

数组和变量差不多,也是可以存放数据的,但是数组可以存放多个数据,而且多个数据的数据类型统一
 格式
 数据类型 [] 数组名称;
 还有一种等效的写法,不推荐
 数据类型 数组名称[];
 变量如果定义好了之后,要想使用,一定要赋值
 数组如果定义好了之后,要想使用一定要初始化
 初始化:就是在内存当中开辟数组的空间,并且赋值一些默认值(准备工作)
 数组的初始化方式有两种:
 1、动态初始化,指定数组的长度
 2、静态初始化,指定数组的内容

动态初始化:直接指定数组的长度,也就是数组当中到底可以存放多少个数据
 格式一、
 数据类型[] 数组名称=new 数据类型[数组长度];
 解析:
 左侧数据类型:也就是数组当中存放的元素全部都是统一的什么类型
 左侧的[]:代表这个一种数组类型
 数组名称:就是一个自定义的标识符,通过名称,可以使用数组当中的数据
 右侧的new:代表创建动作,内存当中开辟空间,创建数组
 右侧数据类型:一定要和左侧的数据类型一样
 右侧[]当中的数组长度:也就是到底能存放多少个数据
 格式二、
 数据类型[] 数组名称;
 数组名称=new 数据类型[数组长度];

     public static void main(String[] args) {
//格式一
int[] array1=new int[];
//格式二
int[] arrar2;
arrar2=new int[];
}

2、数组取值:

如何访问数组当中的元素?
如果直接打印数组的名称,那么到底的是地址值(的哈希值 )

如何访问数组当中的一个具体元素呢?格式
数组名称[索引编号]
索引:也就是数组当中多个元素的编号,从0开始,一直到“长度-1”位置

动态初始化的时候,数组当中的元素都会被赋予一个默认值。
规则:
如果整数,默认就是0;如果是浮点数,默认是0.0;如果是字符,默认是'\u0000'(Unicode写法)

如果布尔值,默认是false;如果是字符串或其他引用类型,那么是null(空常量)

     public static void main(String[] args) {
int[] arrayA=new int[];
System.out.println(arrayA);//[I@279f2327
System.out.println(arrayA[]);
System.out.println(arrayA[]);
System.out.println(arrayA[]);
}

数组在初始化的时候,还有另外一种方式,静态初始化
 静态初始化不会直接指定长度,而是直接指定具体的元素内容
 标准格式
 数据类型[] 数组名称=new 数据类型[]{元素1,元素2};
 标准格式也可以拆分成为两个步骤
 数据类型[] 数组名称;
 数组名称=new 数据类型[]{....};
 简便格式:
 数据类型[] 数组名称={元素1,元素2};
 一旦使用了简便格式,必须一个步骤完成初始化,不能拆分两个步骤

注意事项:

1、虽然静态初始化没有指定长度,但是仍然可以根据具体元素的个数自动推算出来长度

2、虽然简便格式当中可以不写new....,但是仍然有内存当中开辟空间的过程

3、虽然直接指定了具体元素内容,但是仍然会有默认值被替换的过程

     public static void main(String[] args) {
// 动态初始化
int[] arrayA = new int[];
arrayA[] = ;
arrayA[] = ;
arrayA[] = ;
System.out.println(arrayA[]);
System.out.println(arrayA[]);
System.out.println(arrayA[]);
System.out.println("============");
// 静态初始化,一个步骤
int[] arrayB = new int[] { , , };
System.out.println(arrayB[]);
System.out.println(arrayB[]);
System.out.println(arrayB[]);
System.out.println("============");
// 静态初始化,两个步骤
int[] arrayC;
arrayC = new int[] { , , };
System.out.println(arrayC[]);
System.out.println(arrayC[]);
System.out.println(arrayC[]);
System.out.println("============");
int[] arrayD= {,,};
System.out.println(arrayD[]);
System.out.println(arrayD[]);
System.out.println(arrayD[]);
}

3、获取数组长度

无论动态还是静态初始化,数组都具有长度,如何才能获取长度呢?
格式:
数组名称.length
将会得到一个int数字,代表数组的长度
【注意】
一个数组一旦在内存当中创建了,那么数组的长度就不能发生变化

 public static void main(String[] args) {
int[] arrayA= {,,,,,};
System.out.println(arrayA.length);
}

4、数组索引越界异常

数组元素的索引编号,从0开始,一直到“长度-1”为止

如果一个数组长度为3,那么元素的编号分别是:0,1,2.没有3号元素的

如果访问的数组元素索引不存在,那么 将会发生数组索引越界异常

     public static void main(String[] args) {
int[] arrayA = { , , };
System.out.println(arrayA[]); //
System.out.println(arrayA[]); //
System.out.println(arrayA[]); //
System.out.println("数组的长度:" + arrayA.length);
System.out.println("=====================");
System.out.println(arrayA[]); // 编译没有报错,运行就报错!
System.out.println(arrayA[-]); // 数组索引从0开始,绝对不可能为负数
}

5、数组内存示意图

二、JAVA内存分配

1、栈(Stack):主要用来存放局部变量

2、堆(Heap):凡是new 出来的东西,都在堆当中。堆当中的数据有默认值规则

  a):整数,默认是:0

  b):浮点数,默认是:0.0

  c):字符,默认是:"\u0000"(Unicode写法)

  d):布尔值,默认是:false

  e):引用类型(含字符串),默认为null(空常量)

3、方法区(Method Area):存放与class相关的信息

4、本地方法区(Native Method Area):与操作系统相关

5、寄存器(pc Register):与CPU相关,性能极高

三、方法

格式:

修饰符 返回值类型 方法名称(参数类型 参数名称)

{

  ...方法体

  return 返回值;

}

解释:

修饰符:目前的固定写法:两个关键字,public static

返回值类型:方法最终产生的数据类型

方法名称:自定义的名称,规则和变量一样

参数类型:进入方法的数据是什么类型

参数名称:进入方法的数据,对应的变量名称

方法体:需要执行的若干行代码

return:有两个作用,第一结束当前方法,第二带着后面的返回值交给调用处

返回值:方法的最终数据结果

注意事项:

1、返回值类型必须和返回值对应

2、如果参数有多个,那么用逗号进行分割

调用:

1、单独调用

格式:方法名称(参数值);

在使用单独调用的时候,无法使用方法的返回值

2、打印调用

格式:System.out.println()

3、赋值调用

格式:数据类型 变量名称=方法名称(参数值);

调用方法,并且将返回值交给一个变量。注意,变量的数据类型必须和方法的返回值类型对应

 public class Demo03MethodInvoke {
public static void main(String[] args) {
//单独调用
Sum(,);
//打印调用
System.out.println(Sum(,));
//赋值调用
int result=Sum(,);
System.out.println(result);
} public static int Sum(int a, int b) {
return a + b;
}
}

方法调用图解

四、方法重载

现在的问题描述
对于类似的多个方法,全都是执行相加的操作,但是因为参数列表不一样,所以需要记住多个名字,太麻烦!

解决方法
使用方法重载(Overload)的技术,可以达到效果
对于类似功能的多个方法,只要记住一个相同的方法名即可,可以根据参数列表的不同自动适配

方法重载(Overload):方法的名称相同,但是参数列表不同。

注意事项

什么叫做参数列表不同?

1、参数的个数不同

2、参数的类型不同

3、参数 的多类型顺序不同

重载与下列因素无关

1、与返回值类型无关

2、与参数的名称无关

     public static void main(String[] args) {
System.out.println(sum(, ));
System.out.println(sum(, , ));
System.out.println(sum(, , , ));
} public static int sum(int a, int b) {
return a + b;
} public static int sum(int a, int b, int c) {
return a + b + c;
} public static int sum(int a, int b, int c, int d) {
return a + b + c + d;
}

什么叫“参数传递”?

【形式参数(形参)】:在定义方法的时候,写在小括号之内的参数

eg:public static int sum(int a,int b){...}//这里的a和b是在定义的时候写的,所以是形式参数

【实际参数(实参)】:在调用方法的时候,真正传入方法里的数据,叫做实际参数

eg:int num=sum(10,20); //这里的10和20就是实际参数

引用类型传参图解

JAVA 基础篇的更多相关文章

  1. java基础篇---I/O技术

    java基础篇---I/O技术   对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...

  2. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  3. java基础篇---HTTP协议

    java基础篇---HTTP协议   HTTP协议一直是自己的薄弱点,也没抽太多时间去看这方面的内容,今天兴致来了就在网上搜了下关于http协议,发现有园友写了一篇非常好的博文,博文地址:(http: ...

  4. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  5. Java基础篇 - 强引用、弱引用、软引用和虚引用

    Java基础篇 - 强引用.弱引用.软引用和虚引用 原创零壹技术栈 最后发布于2018-09-09 08:58:21 阅读数 4936 收藏展开前言Java执行GC判断对象是否存活有两种方式其中一种是 ...

  6. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  7. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

  8. java基础篇1

    JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...

  9. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  10. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

随机推荐

  1. Net Core的API文档工具Swagger

    一.安装swagger 新建一个net core的api项目,通过NuGet安装Swashbuckle.AspNetCore. 二.注册swagger服务 在Startup.cs中注册Swagger生 ...

  2. 程序员修神之路--redis做分布式锁可能不那么简单

    菜菜哥,复联四上映了,要不要一起去看看? 又想骗我电影票,对不对? 呵呵,想去看了叫我呀 看来你工作不饱和呀 哪有,这两天我刚基于redis写了一个分布式锁,很简单 不管你基于什么做分布式锁,你觉得很 ...

  3. Slickflow.NET 开源工作流引擎高级开发(六) -- WebTest 引擎接口模拟测试工具集

    前言:引擎组件的接口测试不光是程序测试人员使用,而且也是产品负责人员需要用到的功能,因为在每一步流转过程中,就会完整模拟实际用户发生的场景,也就容易排查具体是程序问题还是业务问题,从而快速定位问题,及 ...

  4. 配置, 映射WebDAV, 并通过IIS网站访问

    服务端 0. 服务端安装IIS时, 选中WebDAV发布, Windows身份验证, 安装完毕后, 打开IIS管理器(inetmgr); 1. 新建网站或使用默认网站, 创建虚拟目录, 虚拟目录物理路 ...

  5. C# Serialization performance in System.Runtime.Serialization.Formatters.Binary.BinaryFormatter,Newtonsoft.Json.JsonConvert and System.Text.Json.JsonSerializer.Serialize

    In .net core 3.0 using System;using System.Collections.Generic;using System.Collections;using System ...

  6. mesos-slave启动不起来

    刚开始时候的状态 后来装了docker后

  7. python爬虫网页解析之lxml模块

    08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...

  8. VMware虚拟机安装centos7

    镜像下载地址:http://www.linuxdown.net/ 在vmware上开始安装CentOS系统,点击菜单新建虚拟机,进入如下图步骤进行操作.   接着进行自定义硬盘操作   最后虚拟机就创 ...

  9. electronr进行签名与公证

    windows: 1.设置package.json的有关window打包的相关内容 "win": { "icon": "build/icons/ico ...

  10. kali安装openvas

    参考: https://blog.51cto.com/linhong/2134910?source=drh https://www.freebuf.com/sectool/133425.html ht ...