admin管理员组

文章数量:1794759

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

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

文章目录
  • 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