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. 学习Java第4天

    今天所作的工作: 1.类 2.类的构造方法 3.静态变量 4.类的主方法 5.对象 今天没有完成昨天的工作安排,因为发现进入类之后的编程思想发生的变化,相对与c++的逻辑既有较大的相似性又有不同的性质 ...

  2. dp学习(五)

    与数学有关的dp. 22. 计数dp 23. 数位dp 其实这个可以归到计数dp? 24. 数论dp 25. 概率dp

  3. nextcloud个人云搭建

    nextcloud个人云搭建 目录 nextcloud个人云搭建 树莓派安装系统 安装OMV5 安装dockcer 挂载硬盘进行映射(使用u盘测试的) 不足 配置数据库 使用docker拉取postg ...

  4. 如何在 Qt Creator 中应用 one dark pro 主题

    前言 Qt Creator 自带了几款主题,但是并不好看.在博客 <Qt Creator打造VScode one dark pro主题配色> 中给出了 one dark pro 主题的配置 ...

  5. Lesson7——Pandas 使用自定义函数

    pandas目录 简介 如果想要应用自定义的函数,或者把其他库中的函数应用到 Pandas 对象中,有以下三种方法: 操作整个 DataFrame 的函数:pipe() 操作行或者列的函数:apply ...

  6. 物理CPU,物理核,逻辑CPU,虚拟CPU(vCPU)区别 (转)

    在做虚拟化时候,遇到划分CPU的问题,因此考虑到CPU不知道具体怎么划分,查询一些资料后就写成本文. a. 物理CPU:物理CPU是相对于虚拟CPU而言的概念,指实际存在的处理器,就是我们可以看的见, ...

  7. 简单实现UITableView索引功能(中英文首字母索引) (二) By HL

    简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗 相关类: NSString+PinYing(获取中英文首字母)   参考上面链接 #import "ViewCon ...

  8. WEB前端开发--1(Web前端开发综述)

    Web前端开发 Web--Web系统      前端--网页上为用户呈现的部分   开发--编写代码 1. 前端与后端 前端:网页上为用户呈现的部分 后端:与数据库进行交互,完成数据存取 2. 网站与 ...

  9. Linux用户配置文件、口令配置文件、组配置文件

    1.用户配置文件:保存用户信息 /etc/passwd 2.口令配置文件 /etc/shadow 每一行解释:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效 ...

  10. Solution -「多校联训」消失的运算符

    \(\mathcal{Description}\)   Link.   给定长度为 \(n\) 的合法表达式序列 \(s\),其中数字仅有一位正数,运算符仅有 - 作为占位.求将其中恰好 \(k\) ...