ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【博学谷第一周学习记录】超强总结,用心分享。JavaSE基础学习笔记

2022-07-10 21:35:45  阅读:125  来源: 互联网

标签:arr java 第一周 int 学习 内存 数组 JavaSE 方法


一.JAVA介绍

  1.java跨平台原理

  java程序通过jvm虚拟机可以在任意操作系统上运行,但是jvm虚拟机本身不允许跨平台,允许跨平台的是java程序。

 

  2.java程序的开发和运行的步骤

  1)编写代码:在编写代码的过程中,需要用到的java存放在JRE中,已经写好的java文件

  2)编译代码:.java文件属于【源文件】,无法被jvm所识别执行的,需要通java提供在jdk中的翻译工具将其翻译成jvm可以直接识别的字节码并执行。

  3)运行代码:将字节码文件.class使用jdk中的运行工具运行在jvm虚拟机中。

  3.java的运行

  一个java程序能正常运行,需要在.JAVA文件中编写源代码,通过javac命令编译生成.class字节码文件,最后通过java命令运行java程序

  4,常用的DOS命令

  学习DOS命令提示符的目的是为了能够使用JDK,bin目录中的(javac.exe)编译和(java.exe)运行工具

  dir----------查看当前路径下的内容

  cd目录-----进入单级目录

  cd..----------回退到上一级目录

  cd目录1\目录2\------进入多级目录

  cd\----------回退到跟目录

  cls---------清屏

  exit--------退出命令提示符窗口

二、JAVA变量

  1.java注释

  1)java注释是解释说明程序的文字,是给程序员看的,不是给JVM看的

  2)java中的单行注释语法格式为://注释内容

  3)java中的多行注释语法格式为: /* 注释内容 */

       4)Java中的文档注释是 /*注释内容/

 

  2.java关键字

  特点:

  1)关键字的字母全部小写

  2)常用的代码编辑器,针对关键字有特殊的颜色标记,非常直观

  3)main不是关键字,main是一个主方法

  

  3.常量

  常量的分类:

  1)字符串常量:被双引号所包裹的内容

  2)整数常量:所有整数

  3)小数常量:所有小数

  4)字符常量:被单引号所包裹的内容,里面只能放单个字符

  5)布尔常量:只有true和false两值

  6)空常量:null(null空常量不能输出打印)

  

  4.数据类型内存占用和取值范围

  1)整数类型

   byte ----  内存占用1字节-----取值范围 -128~127

   short-----内存占用2字节------取值范围-32768~32767

   int  ------内存占用4字节------取值范围-2的31次方到2的31次方-1

   long ------内存占用8字节-----取值范围 -2的63次方到2的63次方-1

  2)浮点类型

   float(单精度)----内存占用4字节-----取值范围1.401298e-45到3.402823e+38

   double(双精度)---内存占用8字节----取值范围4.9000000e-324到1.797693e+308

  3)字符

    char-----内存占用2字节---------取值范围0~65535

  4)布尔

    boolean---内存查勇1字节-------取值范围true、false

  

 

  5.变量的注意事项

  1)变量名不允许重复定义

  2)一条语句可以定义多个变量,但需要使用逗号进行分割

  3)变量在使用之前一定要赋值

  4)定义float类型变量的时候需要在数字后面加入F的标识,不区分大小写,定义long类型变量需要在数值后面加入L标识不区分大小写。

  5)变量的作用域只在它所在的大括号中有效

  6.标识符

  1)概念:就是给类、方法、变量等取名的符号

  2)定义规则

    由数字、字符、下划线和$组成

    不能以数字开头

    不能是关键字

    区分大小写

三、类型转换

  

  1.数据类型中的转换

  在基本数据类型变量运算中,会存在数据类型转换的问题,取值范围小的可以随意转换成取值范围大的,反之,则不可以

  ,因此要用到强制类型转换,但是这可以会造成部分数据丢失

  1)转换的规则

  byte---->short---->int----->long----->float----->double

      char------>int

  2)btye、short、char三种数据在运算的时候,不管是否有更高的数据类型,都会提升为int类型,然后再进行运算

 

四、运算符

   1.算术运算符

   1)“+”、“-”、“*”:和小学数学运算方法一样

   2)“/”:整数相除只能得到整数,如果想要得到带小数的结果,必须加入小数的运算

   3)%:取余数

 

   2.字符串+操作

    当+操作出现在字符串时,这个+是字符串连接符,而不是算术运算

    

   3.自增自减运算符

    1)单独使用的时候,++和--无论是放在变量的前边还是后边,结果都是一样的

    2)++或--在前,先对该变量做自增或自减,然后再拿变量参与操作

    3)++--在后,先将变量原本的值,取出来参与操作,随后再进行++或--

    4)--和++只能在变量中运用,不能在常量中运用

    

public static void main(String[] args){
    int a=10;
    int b=++a;
    
    int c=12;
    int d=c++;
    System.out.println(a); //10
    System.out.println(b);//11
    System.out.println(c);//13
    System.out.println(d);//12

    4.&和&&的区别

     1)&:无论符号左边还是右边是true和false,右边都要执行

     2)&&:具有短路效果,符号左边为false的时候,右边就不执行

 

    5.三元运算符

    1).格式:关系表达式 ? 表达式1 :表达式2

    2。执行流程:

      首先计算关系表达式的值,如果为true,取表达式1的值,为false,取表达式2的值.

 

五、流程控制

  1)流程控制包括if..else语句、switch..case语句进行流程控制,if...else语句通过遍历条件分支直到命中条件,而switch...case只需要访问对应索引号便可以到达定位分支,

switch..case是以空间换时间,在处理case常量的情况,switch语句的效率比if..else高,但是在非常量的情况中,if..else更加灵活,而且占用空间小。

  2)switch语句的case穿透现象:在switch语句中,如果case控制的语句体后面不写break,将会出现穿透现象,

    当开始case穿透,后续就不会具有匹配效果,内部的语句都会执行直到看见break,或者switch语句执行完毕才会结束

  3)穿透现象的应用场景:当发现switch语句中,多个case给出的语句体出现重复的,可以使用case穿透来优惠代码

 

六、循环语句

  1、三种循环的区别:

    1)for循环和while循环先判断条件是否成立,然后决定执行循环体,即先判断再执行,do...while先执行后判断

    2)for循环中,条件语句控制的变量,因为归属于for循环的语法结构中,因此在循环结束之后就不会再访问到,但是while语句中的条件语句控制的变量,

      不属于循环语法结构,循环结束后还可以使用

  2.死循环的格式

    1)for的死循环格式:for(;;){}

              2)while的死循环格式while(true){}

    3)do...while的死循环格式 do{}while(true);

  3.跳转控制语句

    1)continue用在循环中,基于条件控制,跳过某次循环体内容的执行,继续洗一次的执行

     2)break用在循环中,基于条件控制,终止循环体内容的执行。

七.Java中内存分配

  栈内存:方法运行时,进入的内存,局部变量都存放放在这一块内存中

  堆内存:new出来的内容都会进入堆内存,并且会存在地址值

  方法区:字节码文件.class文件加载时进入的内存

  

八、数组

  1.动态初始化数组和静态初始化数组的区别:

  1)动态初始化:手动指定数组长度,由系统默认初始化值

  2)静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

  2.使用场景

  1)动态初始化:只明确元素个数,不明确具体数值,推荐使用动态初始化

  2)需求中已经明确了要操作的具体数据

 

九、方法

  1.概念:方法就是一段具有独立功能的代码块,不调用就不执行,可以提高代码的复用性

  2.复用过程

  1)方法没有被调用的时候,都在方法区中的字节码文件中存储

  2)方法被调用的时候,需要进入到栈内存中运行,先调用的方法后运行,因为栈是先进后出的

  3.形参和实参

  1)形参:指的是方法定义中的参数

  2)实参:方法调用中的参数

  4.为什么要有带返回值的方法

  1)我们经常会根据一个方法产出的结果,来去组织另外一段代码逻辑,为了拿到这个方法产生的结果,就需要定义带有返回值的方法

  注意:方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则会报错。

  2)方法的返回值通常会使用变量接收,否则该返回值将无意义
  3)方法不能嵌套定义
  4)方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return,如果要写return(代表结束的标志),那就不能跟具体的数据
  5)return语句下面,不能编写代码,因为永远执行不到

  5.方法参数传递基本数据类型

/*
   方法参数传递为基本数据类型
       传入方法中,是具体的数值
*/
public static void main(String[] args) {
   int number=100;
   System.out.println("调用change方法前"+number);//100
   change(number);
   System.out.println("调用change方法后"+number);//100
}
public static void change(int number){
   number=200;
}

 

  最后输出结果为100 100,原因是第一个100是因为main方法先执行,第二个100是因为 change方法在栈中执行完毕之后就弹栈了,所以再次输出时依旧为100

   6.方法参数传递引用类型

package com.study.method1;

public class YingyongDemo1 {
   /**
    * 方法参数传递引用数据类型
    * 传入方法的是内存地址
    * @param args
    */
   public static void main(String[] args) {
       int[] arr={10,20,30};
       System.out.println("调用change方法前"+arr[1]);//20
       change(arr);
       System.out.println("调用change方法后"+arr[1]);//200
  }
   public static void change(int[] arr){
       arr[1]=200;
  }
}

最后打印输出为 20 200,原因是第一个20是因为main方法先执行,第二个200,是因为,在堆内存中会存放数组,然后栈内存的变量所要调用堆内存的数据,就如同一人牵着一条狗,

现在是两个人牵着同一条狗,所以调用方法change()后栈内存会将change的数值存放到堆内存中,然后change()执行完毕弹栈,但是数值依旧不会改变,所以就变成200

十、进制

  1.

  1)在java中,数值默认都是十进制,不需要添加任何标识

  2)二进制,数值前面以0b开头b大小写都可以 0b10

  3)八进制,数值前面以0开头

  4)十六进制,数值前已0x开头

  2.进制转换

  十进制转换成其他进制就用除法,其他进制转换成十进制就用系数*基数的权次幂相加

  3.位运算

  &----遇0为0,全1为1----true

  |-----遇1为1,全0为0----true

  ^-----相同为false,不同为true

  ~-----取反,包括符号位

  <<----向左移,相当于*2 右边补0

  >>----向右移,相当于/2左边补0

十一、二维数组

  1.二维数组动态初始化格式:

  格式:
  数据类型[][] 变量名=new 数据格式[m][n]
  m 表示这个二维数组,可以存放多少个一维数组
  n 表示每一个一维数组可以存放多少个元素

  2问题:二维数组中存储的是一维数组,那能不能存入【提前创建好的一维数组】呢?

package com.study.Test;

public class DemoArray2 {
   /**
    * 问题:二维数组中存储的是一维数组,那能不能存入【提前创建好的一维数组】呢?
    * @param args
    */


   public static void main(String[] args) {
       int[] arr1={11,22,33};
       int[] arr2={44,55,66};
       int[] arr3={77,88,99,23};
       int[][] arr=new int[3][3];//动态初始化二维数组 3个一维数组3个元素
       arr[2][3]=23;//不能存入
       arr[0]=arr1;
       arr[1]=arr2;
       arr[2]=arr3;
       System.out.println(arr[1][2]);//66
       System.out.println(arr[2][3]);//23
  }
}

  arr[2] [3】=23;//不能存入:因为动态初始化数组已经限定了【3】【3】,所以从堆中的【2】去找数组中的【3】找不到,索引只有0.1.2,造成数组索引异常。

  System.out.println(arr[2】[3]);//23 可以存入:因为数组是引用类型,传递的只是数据的地址,当arr[2]=arr3;时,就已经改变了动态初始化数组的限制,

  就是相当于另外开辟一个数组空间,所以调用arr【2】就是调用arr3【】的全部空间,然后在arr3中添加“23”也就是arr3自己添加的空间地址,可以直接调用

 

十二、本周学习总结

  经过本周的学习,java基础语法部分已经学完了,通过这一周的学习,提升了自己的代码编写能力,也提高自己的逻辑思维能力,对需求问题的思考的方向和做法都有所改变,

在这周的学习中,也学到了许多以前没有学到的东西如位运算、switch穿透现象等,虽然知识点不难,但是还是需要花费时间去消化。上面编写的是我在这周学习中遇到的一些问题,还有

一些没有很牢固的知识点,并不是很全面,因为有一些自己已经完成掌握了就没有记录下来,记录下来的需要花时间进行消化。总而言之,通过这周学习的摸索,在学习课程时,遇到问题要先记录下来,

然后通过查找解决问题的方法或者询问老师,将问题解决,然后学完一章马上做这一章的测试题,理清代码的思路,然后第二天在学习新课程时,先把昨天学到的知识点巩固一遍,然后在学习新的知识,

如此循环,定能学有所成,加油!

 

标签:arr,java,第一周,int,学习,内存,数组,JavaSE,方法
来源: https://www.cnblogs.com/linwenguan/p/16464103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有