欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java学习笔记--数据类型、运算符、选择语句、循环语句、方法、数组介绍,java学习笔记

来源: javaer 分享于  点击 43043 次 点评:280

Java学习笔记--数据类型、运算符、选择语句、循环语句、方法、数组介绍,java学习笔记


文章目录

      • Java引入
      • 基本数据类型
      • 运算符
      • 选择语句
      • 循环语句
      • 方法
      • 数组
          • Java动态内存分配

Java引入

  • java跨平台靠不同平台下的JVM
  • JRE(Java Runtime Environment)java运行环境,包括Java虚拟机和程序所需核心类库。
  • JDK(Java Development Kit)java开发工具包,包含了java开发工具,例如编译工具javac.exe、打包工具jar.exe等。
  • javac命令能够将.java文件编译成.class文件,而java命令则能够运行.class文件(不需要加后缀.class)。
  • javac命令后面跟的是java文件名+扩展名,而java命令后面跟的是类名不带扩展名。

基本数据类型

  • java中的关键字全部为小写。
  • 标识符包括数字、字母、下划线、数字和$,不能以数字开头。
  • 包(也就是文件夹,用于区分相同名字的类)名为小写字母。
  • 类或接口类名每个单词首字母大写。
  • 方法或变量名,首单词首字母小写,后面单词首字母大写。
  • 常量名全部大写,单词中间用下划线隔开。
  • 字符常量用单引号,字符串常量用双引号。
  • 0b开头的数字为二进制,0开头为8进制,0x开头为16进制。
  • java数据类型分为两种,一种是基本数据类型,另一种是引用数据类型。基本数据类型又包括数值型、字符型和布尔型。引用数据类型有类、接口和数组。整数中的byte占1字节,short占2字节,int占4字节,long占8字节;浮点数中的float占4字节,double占8字节;字符char占2字节;布尔boolean占1字节。
  • 默认整型为int,默认浮点型为double。long类型在数字后面加上L。float类型在后面加上F。
  • 不同类型的数值参与运算,会进行默认转换,byte、short、char-int-long-float-double。如果要进行大数据类型到小数据类型的转换,需要进行强制转换,强制转换的格式如下:
  • 目标数据类型 变量 = (目标数据类型)(被转换的数据)
public class HelloWorld {
    public static void main(String [] args){
        short b1 = 1,b2 = 2,b;
        b = b1+b2;//这句话会报错,因为变量运算会先转为int类型
        b = 1+2;//这句话正常,因为常量运算先将结果计算出来(实际上还是int类型的运算),看是否在short的范围内,如果在就不报错
        b = 8;//执行时,8默认是int类型,赋值时会做数据检测,如果不在范围内就报错
    }
}
  • 字符数据可以参与运算,如’a’等于97,'A’等于65,'0’等于48。
  • 字符串和其他数据做+,结果是字符串类型。这里的+表示字符串连接符。
public class HelloWorld {
    public static void main(String [] args){
        System.out.println("hello"+'a'+1);//输出结果为helloa1
        System.out.println('a'+1+"hello");//输出结果为98hello
    }
}

运算符

  • 运算符的种类:算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三目运算符
  • 算术运算符:+,-,*,/,%,++,–
  • 整数相除只能得到整数,若要得到小数,需要将其中一个数据变为浮点型。
  • ++,–单独使用时:放在操作数的前面和后面效果一样;参与运算使用时:放在操作数前面,先自增或者自减,然后再参与运算;放在操作数后面,先参与运算,再自增或者自减。
  • 扩展的赋值运算符(例如+=)隐含了强制的类型转换。s += 1不是等价于s = s + 1,而是s = (s的数据类型)(s+1)。
public class HelloWorld {
    public static void main(String [] args){
        short s = 1;
        s  = s + 1;//报错。因为数据类型会默认转为int
        s += 1;//不报错。因为隐含了强制数据类型转换
    }
}
  • 关系运算符的结果必是布尔型,逻辑运算符(&,|,^,!)用来连接布尔型数值,其结果也必是布尔型。
  • 需要注意一点的是逻辑运算符还有&&和||,它们与上面的区别就是当左边的结果已经能够决定最终的结果时,右边的语句不执行。即当使用&&时,左边为false,终止执行;当使用||时,左边为true,终止执行。
  • 位运算符是在二进制补码的基础之上进行操作的,包括按位与&,按位或|,按位异或^,按位取反~。
//实现两个整数变量的交换
public class HelloWorld {
    public static void main(String [] args){
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b);
        int c = a;
        a = b;
        b = c;
        System.out.println("a:"+a+",b:"+b);
    }
}
//实现两个整数变量的交换
public class HelloWorld {
    public static void main(String [] args){
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b);
        a = a^b;
        b = a^b;//异或同一个数两次,结果不变
        a = a^b;
        System.out.println("a:"+a+",b:"+b);
    }
}
//实现两个整数变量的交换
public class HelloWorld {
    public static void main(String [] args){
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b);
        a = a+b;
        b = a-b;
        a = a-b;
        System.out.println("a:"+a+",b:"+b);
    }
}

//实现两个整数变量的交换
public class HelloWorld {
    public static void main(String [] args){
        int a = 10;
        int b = 20;
        System.out.println("a:"+a+",b:"+b);
        a = (a+b) - (b=a);
        System.out.println("a:"+a+",b:"+b);
    }
}
  • <<:左移 左边最高位丢弃,右边补零;>>:右移 最高位时0,左边补零,最高位是1,左边补1。>>>:无符号右移 无论最高位是0还是1,左边补0。
  • 三目运算符 (关系表达式)?表达式1:表达式2,如果辨析表达式的结果为true,取表达式1,否则取表达式2。
import java.util.Scanner;
public class HelloWorld {
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("please input the first number:");
        int x = sc.nextInt();
        System.out.println("please input the second number:");
        int y = sc.nextInt();
        int sum = x+y;
        System.out.println("sum:"+sum);
    }
}

选择语句

  • if语句的格式:
if(关系表达式){
    语句体
}
  • 一个注意点:大括号存在的地方不要用分号。
  • switch语句的格式:
//switch后面的表达式可以是:byte,short,int,char,枚举,字符串
switch(表达式)case value 1://case后面的必须是常量,不能是变量
        语句体1;
        break;//用来退出switch语句体
    case value 2:
        语句体 2;
        break;
    ...
    default:
        语句体 n+1;
        break;//可省略

循环语句

  • for循环语句格式:
for(初始化语句;判断条件语句;控制条件语句){
    循环体语句;
}
/*
执行流程:
A. 执行初始化语句
B. 执行判断条件语句,看其结果是true还是false。如果是false,循环结束;如果是true,继续执行。
C. 执行循环体语句。
D. 执行条件控制语句。
E. 回到B继续执行。
*/
  • while循环语句格式:
初始化语句;
while(判断条件语句){
    循环体语句;
    控制条件语句;/*
执行流程与for循环一致。
*/
  • do-while循环语句格式:
初始化语句;
do {
    循环体语句;
    控制条件语句;
}while(判断条件语句);
  • 三个循环的区别:do-while循环首先执行一次循环,无论条件是否满足;for循环执行后变量会被释放,不能再使用,而while循环的初始化变量因为在外部定义,可以在退出循环后继续使用。
  • java中可以使用标号与break配合来跳出外层循环。
public class HelloWorld {
    public static void main(String [] args){
        outer: for(int i=1;i<10;i++){
            System.out.println("i = " + i);
            inner: for(int j=1;j<10;j++){
                System.out.println("j = " + j);
                break outer;
            }
        }
    }
}

方法

  • 方法的格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2{
    方法体语句;
    return 返回值;
}
  • 方法重载:方法名相同,参数列表不同,与返回值类型无关

数组

  • 数组是存储同一种数据类型多个元素的集合。也可以看成一种容器。数组既可以存储基本数据类型,也能存储引用数据类型。
  • 数组定义格式:
//数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[5];
//等号左边[]:代表数组,几个中括号就代表几维数组
//上面是动态初始化,只定义数组长度,由系统给出初始化值。
//还有一种是静态初始化,给出初始化的值,由系统决定长度。
  • new出来的对象:整数类型的默认初始化值是0,浮点型的默认初始化值是0.0,布尔型的默认初始化值是false,字符型的默认初始化值是’\u0000’,引用型的默认值是null。
Java动态内存分配
  • java虚拟机运行时数据区:Java虚拟机栈,Java堆,方法区,本地方法栈和程序计数器(program counter register)。
  • java虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
  • 通常会将局部变量表部分称为栈,局部变量表存放了编译期间可知的各种基本数据类型、引用对象和returnAddress类型(指向一条字节码指令的地址)。
  • 堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例。
  • 方法区与堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
  • 静态方式定义数组:
int[] arr = new int[]{1,2,3};
int[] arr = {1,2,3};
//第一种方式可以将声明和赋值分开写,第二种方式必须写在同一行,即第一种方式还可以写为:
int[] arr;
arr = new int[]{1,2,3};
//还有一种较为不常见的定义方式,就是将中括号放在变量名的后面:
int ary[] = new int[3];
  • 获取数组长度使用属性名length,即arr.length。
  • 二维数组的定义格式:
//定义一个二维数组,含有3个一维数组,每个一维数组又有4个元素
int[][] arr = new int[3][4];
//另外还有两种定义方式,不常用
int arr[][] = new int[3][4];
int[] arr[] = new int[3][4];
  • 访问其中每一个一维数组地址的方式为:arr[i]
  • 以上的二维数组定义方式为,每一个二维数组中的一维数组的长度固定。其实还可以让其中每个一维数组长度变化。
int[][] arr = new int[3][];
arr[0] = new int[4];
arr[1] = new int[5];
arr[2] = new int[8];
  • 与一维数组一样,二维数组的定义方式除了有动态定义,还有静态定义方式,也就是在初始化时就将值赋好。
//保持每一个一维数组长度固定
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
//采用简化方式静态定义,每个一维数组长度不定
int[][] arr = {{1,2,3},{4,5},{6}}
  • java中参数的传递就是值的复制传递,基本数据类型传递数据本身的值,而引用数据类型(如数组)传递表示地址的值。

相关文章

    暂无相关文章
相关栏目:

用户点评