编程语言
首页 > 编程语言> > 【博学谷第一周学习记录】超强总结,用心分享。JavaSE基础学习笔记

【博学谷第一周学习记录】超强总结,用心分享。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