Java基础知识复习

1.循环

1.1、 for循环
for(int i =1;i<=10;i++){
System.out.println("Hello world"+i);
}

  • 补充:i++与++i的区别
package com.daytwo;

public class Tarray {

	public static void main(String[] args) {
//i++与++i的区别
int k=1;
int c=1;
int k1=k++;
int c1=++c;
System.out.println(k1); //1
System.out.println(c1); //2
/* i++ 先赋值在运算,例如 a=i++,先赋值a=i,后运算i=i+1,所以结果是a==1
++i 先运算在赋值,例如 a=++i,先运算i=i+1,后赋值a=i,所以结果是a==2*/
} }
1.2 while循环
  • do ..while 最少执行一次
  • while和for循环最少执行0次(条件不满足)
package com.daytwo;
public class Tarray {
public static void main(String[] args) {
//WHILE循环
//标准格式
//扩展格式
int i=0;
while(i<10){
System.out.println("Hello world"+i);
i++;
}
//do while
/*格式
* do{
* 循环体
* }while(条件)
* */
int kk=1;
do{
System.out.println("Hello world"+kk);
kk++;
}while(kk<=10);
}
}
  • 注意:for循环的变量在小括号中定义,属于局部变量,而while和do while循环写在外面,循环结束之后可以继续使用;

  • 建议:凡是次数一定的就选择for循环,次数不一定的选择while或者do while循环

1.3、终止语句
  • break
package com.daytwo;

public class demo1 {

	public static void main(String[] args) {
/*关键字break,continue*/
for (int i=1;i<=10;i++){
if(i==4){
break;//结束整个循环
}else{
System.out.println("Hello WORLD"+i);
}
}
}
}
  • continue
package com.daytwo;

public class demo1 {

	public static void main(String[] args) {
/*关键字break,continue*/
for(int i=1;i<=10;i++){
if(i==4){
continue;//跳出本次循环
}else{
System.out.println("Hello WORLD"+i);
} }
} }

补充:永远停不下来的循环叫做死循环;

2、数组

  • 数组是一种引用类型的数据
  • 数组中的数据必须类型同一
  • 数组的长度在程序运行期间不能改变
2.1数组创建
  • 动态初始化
//语法
int[] array1=new int[300];
double[] array1 =new double[400]
String [] array2=new String[300]

  • 静态初始化
package com.daytwo;

public class DemoArray {

	public static void main(String[] args) {
//数组
//数组是一种引用类型的数据
// 数组中的数据必须类型同一
// 数组的长度在程序运行期间不能改变
//动态初始化
int[] array1=new int[300];
//静态
//省略格式
int [] arry2 ={15,25,35};
//另一种静态声名方法
//标准格式
// int[] array2=new int[]{5,15,25};
String str =arry2.toString();
System.out.println(str);//[I@15db9742直接对象打印出地址;
}
}

  • 如果不确定数组的元素使用动态初始化,确定使用静态初始化;

  • 直接打印数组名称得到的是数组对应内存地址的哈希值

注意:

  • 动态声名空数组是数组中的内容规则如下

    • int 默认为0
    • double(浮点型)默认为0.0
    • 字符型 默认为 '\u0000' uniquecode编码的0
    • 如果是引用类型则为null
    • 静态初始化时也有默认值的过程但是会直接被大括号中的值覆盖掉
2.2 数组的赋值
		array1[0]=1;array1[1]=10;
System.out.println(array1[1]);
2.3 数组内存的变化
  • 单数组和两个数组不发生交互
package com.daytwo;

public class Demo {
public static void main(String[] args){
/*两个数组内存变化,不产生关联*/
int[] array1= new int[3];
array1[1]=10;
array1[2]=20;
System.out.println(array1);
System.out.println(array1[0]);
System.out.println(array1[1]);
System.out.println(array1[2]);
System.out.println("======================");
int[] array2 =new int[3];
array2[1]=100;
array2[2]=200;
System.out.println(array2);
System.out.println(array2[0]);
System.out.println(array2[1]);
System.out.println(array2[2]); }
} /***********输出结果*************/
/*
[I@15db9742
0
10
20
======================
[I@6d06d69c
0
100
200
*/

  • 产生交互赋值

    package com.daytwo;
    
    public class Demo2 {
    
    	public static void main(String[] args) {
    int[] array1= new int[3];
    array1[1]=10;
    array1[2]=20;
    System.out.println(array1);
    System.out.println(array1[0]);
    System.out.println(array1[1]);
    System.out.println(array1[2]);
    System.out.println("======================");
    int[] array2 =array1;
    System.out.println(array2);
    System.out.println(array2[0]);
    System.out.println(array2[1]);
    System.out.println(array2[2]);
    System.out.println("======================");
    array2[1]=100;
    array2[2]=200;
    System.out.println(array2);
    System.out.println(array2[0]);
    System.out.println(array2[1]);
    System.out.println(array2[2]);
    }
    }
    /*
    输出结果
    [I@15db9742
    0
    10
    20
    ======================
    [I@15db9742
    0
    10
    20
    ======================
    [I@15db9742
    0
    100
    200
    */
2.4 数组空指针异常
  • 所有的引用类型数据都可以赋值为一个null,但代表什么都没有;
package com.daytwo;

public class ArrayEx {

	public static void main(String[] args) {
//数组常见异常 //1、数组越界
// int[] arr ={1,2,3};
// System.out.println(arr[0]);
//此处超出越界
// System.out.println(arr[3]);
//ArrayIndexOutOfBoundsException //空指针异常
// 所有的引用类型数据都可以赋值为一个null,但代表什么都没有;
int[] arry=null;
System.out.println(arry[0]);//NullPointerException /*
* 数组必须进行new初始化才能使用其中的元素
* 如果只是赋值了一个null,没有进行new创建那么将会发生空指针异常NullPointerException
* */
}
}
2.5 数组的遍历
  • 常规遍历
    //数组的遍历
    int[] arrt={1,2,34,4,56,8,7};
    for(int i=0;i<arrt.length;i++){
    System.out.println(arrt[i]);
    }
  • foreach遍历

遍历数组就是获取数组的每个元素。通常遍历数组都是使用for循环来实现的,但是for循环不够简洁,下面我们简要介绍一下使用foreach语句来实现遍历数组的方法。java5之后,Java提供了一种更简洁的循环:foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组时,无须获得数组和集合长度,无须根据索(下标)引来访问数组元素,foreach循环自动遍历数组和集合的每一个元素。

// foreach 语法
for(type element: array)
{
System.out.println(element);
}

foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。

因此不要对foreach的循环变量赋值。

例如:

package com.daytwo;

public class Demo3 {

	public static void main(String[] args) {
//数组的遍历
int[] arrt={1,2,34,4,56,8,7};
for(int i=0;i<arrt.length;i++){
System.out.println(arrt[i]);
}
System.out.println("=======================");
for(int a:arrt){
//一般不要对a进行赋值;
// a=0;
System.out.println(a);
}
} }
2.6 数组参数
  • 数组可以作为方法的参数

  • 当调用方法的时候,方法向小括号进行传参,传递进去的其实是数组的地址值。

    package com.daytwo;
    
    public class Demo6 {
    
    	/*
    * 数组可以作为方法的参数
    * 当调用方法的时候,方法向小括号进行传参,传递进去的其实是数组的地址值。
    * */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] arry={1,2,3};
    teAray(arry);//实参是arry的地址值;
    } public static void teAray(int[] arry){
    System.out.println("接收的参数是"+arry);//地址值
    for(int a:arry){
    System.out.println(a);
    }
    }
    }
    2.7 数组返回值
    package com.daytwo;
    
    public class Demo6 {
    
    	/*
    * 数组可以作为方法的参数
    * 当调用方法的时候,方法向小括号进行传参,传递进去的其实是数组的地址值。
    * */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] arry={1,2,3};
    teAray(arry);//实参是arry的地址值;
    System.out.print(arry[0]);
    int[] res=col(2,3,4);
    System.out.println("返回值是"+res);//返回值是数组是数组地址
    System.out.println(res[0]);
    System.out.println(res[1]);
    } public static void teAray(int[] arry){
    arry[0]=100;//方法内部修改数组的值会直接修改,不像局部变量一样有作用域,因为数组存放在堆内存中
    System.out.println("接收的参数是"+arry);//地址值
    for(int a:arry){
    System.out.println(a);
    }
    } /*数组作为方法返回值,返回的也是数组的地址值*/
    public static int[] col(int i,int b,int c){
    int sum=i+b+c;
    int avg=(i+b+c)/3;
    int[] arr={sum,avg};
    //一个函数或者方法只能有一个返回值
    System.out.println("方法内部数组的地址是"+arr);
    return arr;
    }
    }

3、内存

3.1内存分配
  • 1、栈(Stack)存放的都是方法中的局部变量,方法的运行一定要在栈当中运行。

    • 局部变量:方法的参数,或者是方法{}内部的变量
    • 作用域:一旦超出作用域,立刻从栈内存中消失
  • 2、堆(Heap):凡是new 出来的东西都在堆内存中
    • 堆内存里面的东西只有一个地址值:16进制
    • 堆内存里卖弄的数据,都有默认值。规则与数组类似;
      • 补充:布尔型默认是false
  • 3、方法区(method Area):存储class相关信息,包含方法信息
  • 4、本地方法栈(Native Method Stack):与操作系统相关
  • 5、寄存器(pc Register)与CPU相关

java数组复习和内存分配的更多相关文章

  1. java程序运行时内存分配详解

    java程序运行时内存分配详解 这篇文章主要介绍了java程序运行时内存分配详解 ,需要的朋友可以参考下   一. 基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个 ...

  2. 《深入理解 java 虚拟机》学习 -- 内存分配

    <深入理解 java 虚拟机>学习 -- 内存分配 1. Minor GC 和 Full GC 区别 概念: 新生代 GC(Minor GC):指发生在新生代的垃圾收集动作,因为 Java ...

  3. [转]使用Java Mission Control进行内存分配分析

    jdk7u40自带了一个非常好用的工具,就是Java Mission Control.JRockit Misson Control用户应该会对mission control的很多功能十分熟悉,JRoc ...

  4. Java学习之旅基础知识篇:数组及引用类型内存分配

    在上一篇中,我们已经了解了数组,它是一种引用类型,本篇将详细介绍数组的内存分配等知识点.数组用来存储同一种数据类型的数据,一旦初始化完成,即所占的空间就已固定下来,即使某个元素被清空,但其所在空间仍然 ...

  5. Java学习之二维数组定义与内存分配详解

    二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的元素有多少个. 注意: ...

  6. java\c程序的内存分配

    JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该 ...

  7. JAVA中堆栈和内存分配原理

    1.栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  8. JAVA中堆栈和内存分配

    (一).栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或 ...

  9. java程序运行时内存分配详解 (转)

    转自:http://www.tuicool.com/articles/uU77v2 一.  基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Ja ...

随机推荐

  1. 学习JAVAWEB第三十七天(读构建之法有感)

    读<构建之法>有感 我今年暑假回去就要升入大二了,在今年的专业分流时,我选择了软件工程专业,起初的想法很简单,做一款优秀的,能拥有大量用户的软件,甚至还想通过自己的软件改变人们的生活.读了 ...

  2. 深入学习python内存管理

    深入Python的内存管理   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语 ...

  3. IntelliJ IDEA 中文官方文档

    目录 认识IntelliJ IDEA IntelliJ IDEA 安装和设置 IntelliJ IDEA如何使用 IntelliJ IDEA中不容错过的快捷键 IntelliJ IDEA专业的使用技巧 ...

  4. storyboard文件的认识

    - 作用:描述软件界面 - 程序启动的简单过程     - 程序一启动,就会加载`Main.storyboard`文件     - 会创建箭头所指的控制器,并且显示控制器所管理的软件界面 - 配置程序 ...

  5. webpack热更新 同时导出文件到本地

    webpack 配置热更新后,文件配置导出到本地 安装 npm i webpack-dev-server-output --save-dev 引入 const WebpackDevServerOutp ...

  6. JVM性能调优与实战基础理论篇-上

    Java虚拟机 概述 Java官方文档 https://docs.oracle.com/en/java/index.html JVM是一种规范,通过Oracle Java 官方文档找到JVM的规范查阅 ...

  7. 快速搭建springboot工程

    一.创建SpringBoot的三种方式 在线创建: https://start.spring.io 在IntelliJ IDEA中选择Spring Initializr创建:或者在Eclipse中选择 ...

  8. python小白记录二 ——自动化测试selenium中配置浏览器

    1.根据不同的浏览器 下载不同的驱动,下面是谷歌的驱动 下载地址:ChromeDriver - WebDriver for Chrome - Downloads (chromium.org)     ...

  9. Feign实现文件上传下载

    Feign框架对于文件上传消息体格式并没有做原生支持,需要集成模块feign-form来实现. 独立使用Feign 添加模块依赖: <!-- Feign框架核心 --> <depen ...

  10. 06 前端之Bootstrap框架

    目录 前端之Bootstrap框架 一.简介 二.引入方式 本地引入(最完整的) CDN引入 三.布局容器 四.栅格系统 五.列偏移 六.表格与表单 6.1表格 6.2表单form 七.按钮 预定义样 ...