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. 做开源界的MATLAB,PyMiner 需要更多热爱开源的你加入

    MATLAB 和 Mathematica.Maple 并称为三大数学软件.它在数学类科技应用软件中在数值计算方面首屈一指.MATLAB 可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其 ...

  2. 最近公共祖先-LCA

    题目描述 时间限制:1.2s 内存限制:256.0MB 问题描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入格式 第一行包含三个正整数\(N\),\(M\),\(S\),分别 ...

  3. 「JOISC 2014 Day1」 历史研究

    「JOISC 2014 Day1」 历史研究 Solution 子任务2 暴力,用\(cnt\)记录每种权值出现次数. 子任务3 这不是一个尺取吗... 然后用multiset维护当前的区间,动态加, ...

  4. wget: unable to resolve host address ‘dl.grafana.com’的解决方法

    [root@Server-qnrsyp system]# wget --no-check-certificate https://dl.grafana.com/oss/release/grafana_ ...

  5. position和anchorPoint笔记

    position和anchorPoint是CAlayer的两个属性.     我们以前修改一个控件的位置都是能过Frame的方式进行修改.     现在利用CALayer的position和ancho ...

  6. java file已存在,新建流写入此文件是否会覆盖原本file信息

    java中建立文件输出流,当文件不存在时会新建一个文件:如果有同名文件,自动覆盖.不存在时自动建立.FileOutputStream的默认构造方法是直接覆盖掉原来的文件,而FileOutputStre ...

  7. Ansible自动化运维工具及其常用模块

    Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...

  8. TCP的报文详细解读

    这张图好像挺有名的,其实一开始我看见的时候是一脸懵逼的,但是通过翻书(大学时代最害怕的计算机网络),查阅他人博客等等办法,最后终于有了一个系统的了解,当然,这里知识点多而杂,大家可以多看几遍,结合上面 ...

  9. 当Synchronized遇到这玩意儿,有个大坑,要注意!

    你好呀,我是歪歪. 前几天在某技术平台上看到别人提的关于 Synchronized 的一个用法问题,我觉得挺有意思的,这个问题其实也是我三年前面试某公司的时候遇到的一个真题,当时不知道面试官想要考什么 ...

  10. Vue.use初探

    Vue.use 问题 相信很多人在用Vue使用别人的组件时,会用到 Vue.use(). 例如:Vue.use(VueRouter).Vue.use(MintUI). 但是用 axios时,就不需要用 ...