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相关

最新文章

  1. canvas缓动3
  2. 【GoLang】GoLang 错误处理 -- 使用 error is value 的思路处理,检查并处理error
  3. Android Gradle 多Module单独编译一个Module
  4. C#(winform)浏览按钮
  5. 转载 javascript中的正则表达式总结 二
  6. HDU 1420 Prepared for New Acmer【中国剩余定理】
  7. KVM套件-linux基础
  8. ml-agent:Win10下环境安装
  9. Oracle中的instr()函数
  10. 【XSY1580】Y队列 容斥
  11. 移动端解决悬浮层(悬浮header、footer)会遮挡住内容的方法
  12. linux c 输出信息到console
  13. 基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发
  14. mab算法
  15. Unity 动画知识之一
  16. 使用node新建一个socket服务器连接Telnet客户端并且进行输入的显示
  17. Tasker App Factory
  18. (转) iphone开发资源汇总
  19. php 将二维数组批量插入到数据库中
  20. 《转》HTTP 协议入门

热门文章

  1. es的settings设置详解
  2. kubernetes之部署traefik-ingress分为http和https
  3. Android 12(S) 图形显示系统 - createSurface的流程(五)
  4. JAVA多线程学习七-线程池
  5. 在CentOS 6.x/7.x上安装git
  6. bom-offset
  7. CentOs7.6配置邮件服务并发送邮件
  8. React凤凰项目规范
  9. 【转】Python 并行分布式框架 Celery
  10. mybatis的一对多(collection)