文章目录

  • java学习笔记之(基础知识)
    • java程序基本结构
    • 变量和数据类型
      • 变量
      • 数据类型
      • 数据类型转换
    • 数据运算
      • 整数运算
      • 浮点运算
      • 布尔运算
      • 字符和字符串
      • 数组类型
    • 数组
      • 遍历数组
      • 数组排序
      • 二维数组
      • 命令行参数

java学习笔记之(基础知识)

java程序基本结构

程序的基本结构简单来说,我们要想运行起来一个程序,至少包含那几部分。以下面的向屏幕输出hello程序为例:

public class Hello {//主类:类的访问权限+类+类名
    public static void main(String[] args) {//main方法(程序的固定执行入口):方法的访问权限+静态方法+返回类型+主方法名
        // 向屏幕输出文本:
        System.out.println("Hello, world!");
    
    }
} // class定义结束

1)由于java是面向对象的语言,所以程序的基本单位是class(类),class是关键字,hello是class的名字(类名),public是访问修饰符,表示class是公开的。
不写public,也能正确编译,但是这个类将无法从命令行执行。
在class内部,可以定义若干方法(method):
2)一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;
3)方法是可执行的代码块,main方法()里有一个参数,参数类型是String[],参数名是args

变量和数据类型

变量

1)什么是变量?
变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过 门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。不同的变量,类型不同,占用的空间大小不同。
2)变量的类型
基本类型变量 和 引用类型变量
2)变量的使用:
变量=数据类型+变量名+值;
该区域的数据在同 一类型范围内不断变化。

数据类型

基本数据类型 和 引用数据类型
1)基本数据类型:CPU可以直接进行运算的类型。包括:整数、浮点、字符、布尔。
数据类型区别:所占用的存储空间大小不同。
计算机存储结构:计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二进制数,即8个bit。它的二进制表示范围从00000000-11111111,换算成十进制是0-255。

浮点型(说明):

float f1 = 3.14f;//float型,需要加上f后缀。
float f2 = 3.14e38f; // 科学计数法表示的3.14x10^38
double d = 1.79e308;//直接写小数默认double型
double d2 = -1.79e308;
double d3 = 4.9e-324; // 科学计数法表示的4.9x10^-324

字符型(char说明):
字符类型char表示一个字符。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符,都占两字节;
注意char类型使用单引号’,且仅有一个字符,要和双引号"的字符串类型区分开。
2)引用数据类型
类、接口、 数组 (除了基本数据类型,剩下的都是引用类型);
引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置;
引用类型的变量可以是空值null;
引用类型最常用的就是String字符串:String s = “hello”;
3)下图总结必背

数据类型转换

自动类型转换

强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成
精度降低或溢出。

数据运算

整数运算

自增/自减

		int n = 3300;
        n++; // 3301, 相当于 n = n + 1;
        n--; // 3300, 相当于 n = n - 1;
        int y = 100 + (++n); // 不要这么写
        System.out.println(y);

注意++写在前面和后面计算结果是不同的,++n表示先加1再引用n,n++表示先引用n再加1。不建议把++运算混入到常规运算中,容易自己把自己搞懵了。

浮点运算

浮点数常常无法精确表示,并且浮点数的运算结果可能有误差;

		double x = 1.0 / 10;
        double y = 1 - 9.0 / 10;
        // 观察x和y是否相等:
        System.out.println(x);
        System.out.println(y);

比较两个浮点数通常比较它们的差的绝对值是否小于一个特定值;

// 比较x和y是否相等,先计算其差的绝对值:
double r = Math.abs(x - y);
// 再判断绝对值是否足够小:
if (r < 0.00001) {
    // 可以认为相等
} else {
    // 不相等
}

整型和浮点型运算时,整型会自动提升为浮点型;

		int n = 5;
        double d = 1.2 + 24.0 / n; // 6.0
        System.out.println(d);

可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值。

布尔运算

三元运算符
Java还提供一个三元运算符b ? x : y,它根据第一个布尔表达式的结果,分别返回后续两个表达式之一的计算结果。
(注意到三元运算b ? x : y会首先计算b,如果b为true,则只计算x,否则,只计算y。此外,x和y的类型必须相同,因为返回值不是boolean,而是x和y之一。)

字符和字符串

字符char:基本数据类型、 保存一个Unicode字符(2字节)、 单引号表示char c1 = ‘A’;
字符串String:引用类型 、 存储0个到任意个字符、 双引号"…“表示String s2 = “ABC”; // 包含3个字符
常见的转义字符
" 表示字符”
’ 表示字符’
\ 表示字符
\n 表示换行符
\r 表示回车符
\t 表示Tab
\u#### 表示一个Unicode编码的字符
例如:
String s = “ABC\n\u4e2d\u6587”; // 包含6个字符: A, B, C, 换行符, 中, 文
**字符串连接 **
1)字符串+字符串

        String s1 = "Hello";
        String s2 = "world";
        String s = s1 + " " + s2 + "!";
        System.out.println(s);

2)字符串+其他数据类型
将其他数据类型先自动转型为字符串,再连接。

 		int age = 25;
        String s = "age is " + age;
        System.out.println(s);

3)多行字符串拼接

   String s = "first line \n"
         + "second line \n"
         + "end";

**字符串不可变性 **

		String s = "hello";
        System.out.println(s); // 显示 hello
        s = "world";
        System.out.println(s); // 显示 world

字符串s变了吗?其实变的不是字符串,而是变量s的“指向”。
执行String s = “hello”;时,JVM虚拟机先创建字符串"hello",然后,把字符串变量s指向它;
紧接着,执行s = “world”;时,JVM虚拟机先创建字符串"world",然后,把字符串变量s指向它;

引用类型的变量可以指向一个空值null
引用类型的变量可以指向一个空值null,它表示不存在,即该变量不指向任何对象。例如:

String s1 = null; // s1是null
String s2; // 没有赋初值值,s2也是null
String s3 = s1; // s3也是null
String s4 = ""; // s4指向空字符串,不是null

注意要区分空值null和空字符串"",空字符串是一个有效的字符串对象,它不等于null。

数组类型

数组是同一数据类型的集合,数组一旦创建后,大小就不可变;
数组创建:
1.静态初始化(定义数组时直接指定初始化的元素): 数据类型[ ] 数组名 ={初始元素}

		int[] ns = { 68, 79, 91, 85, 62 };
        System.out.println(ns.length); // 编译器自动推算数组大小为5

2.动态初始化(创建一个容量确定的数组): 数组名=new 数据类型[大小];

  // 5位同学的成绩:
        int[] ns = new int[5];
        int n = 5;
        System.out.println(ns[n]); // 索引n不能超出范围

可以通过索引访问数组元素,但索引超出范围将报错;

数组元素可以是值类型(如int)或引用类型(如String),但数组本身是引用类型。
字符串数组:
如果数组元素不是基本类型,而是一个引用类型,那么,修改数组元素会有哪些不同;
字符串是引用类型,因此我们先定义一个字符串数组:

String[] names = {
    "ABC", "XYZ", "zoo"
};

对names[1]进行赋值,例如names[1] = “cat”;,效果如下:

这里注意到原来names[1]指向的字符串"XYZ"并没有改变,仅仅是将names[1]的引用从指向"XYZ"改成了指向"cat",其结果是字符串"XYZ"再也无法通过names[1]访问到了。

数组

遍历数组

1.for循环遍历

 		int[] ns = { 1, 4, 9, 16, 25 };
        for (int i=0; i<ns.length; i++) {
            int n = ns[i];
            System.out.println(n);
        }

2.for each遍历
(数据类型 变量:数组名){

变量 n 直接拿到 ns数组 的元素,而不是索引。
输出变量n 即可输出数组的元素。
变量n的数据类型与数组的数据类型一致

  	public class Main {
    public static void main(String[] args) {
        String[] ns = { "banana", "apple", "pear" };//String ns
        for(String n : ns){//String n
			System.out.println(n);//输出n  代表输出每个元素
		}
    }
}

3.Java标准库提供了Arrays.toString(),快速打印
注意添加操作数组的工具类
函数参数为Arrays.toString(数组名ns)

import java.util.Arrays;//操作数组的工具类

public class Main {
    public static void main(String[] args) {
        int[] ns = { 1, 1, 2, 3, 5, 8 };
        System.out.println(Arrays.toString(ns));
    }
}

2.直接打印数组变量,得到的是数组在JVM中的引用地址:

int[] ns = { 1, 1, 2, 3, 5, 8 };
System.out.println(ns); // 类似 [I@7852e922

数组排序

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        Arrays.sort(ns);
        System.out.println(Arrays.toString(ns));
    }
}

二维数组

1.动态初始化
语法:类型[][] 数组名=new 类型[大小][大小];
int a[][]=new int[2][3]
2.静态初始化

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[][] ns = {
            { 1, 2, 3, 4 },
            { 5, 6, 7, 8 },
            { 9, 10, 11, 12 }
        };
        int[] arr0 = ns[0];
        System.out.println(arr0.length); // 4
		System.out.println(Arrays.toString( ns[0]));//[1, 2, 3, 4]
		System.out.println(ns[0]);//一维数组 arr0 首地址:[I@d716361
    }
}

命令行参数

Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。

这个命令行参数由JVM接收用户输入并传给main方法:

public class Main {
    public static void main(String[] args) {
        for (String arg : args) {
            System.out.println(arg);
        }
    }
}

更多推荐

【java学习笔记之(基础知识)】