java-廖雪峰笔记-入门

java介绍

JDK:Java Development Kit
JRE:Java Runtime Environment

java-廖雪峰笔记-入门_第1张图片
JRE运行java字节码的虚拟机
JDK包含JRE、编译器、调试器等开发工具

JSR规范:Java Specification Request
JCP组织:Java Community Process

RI:Reference Implementation
TCK:Technology Compatibility Kit

后缀文件:
.java:这个可执行程序其实就是JVM,运行Java程序,就是启动
.JVM,然后让JVM执行指定的编译后的代码;
.javac:这是Java的编译器,它用于把Java源码文件(以.java后缀结尾)编译为Java字节码文件(以.class后缀结尾);
.jar:用于把一组.class文件打包成一个.jar文件,便于发布;
.javadoc:用于从Java源码中自动提取注释并生成文档;
.jdb:Java调试器,用于开发阶段的运行调试。

IDE是集成开发环境:Integrated Development Environment

java语法

class :定义类
public :表示类公开
static :静态

名为main的方法

public static void main(String[] args) {
        ...
    }

此定义为java程序的固定入口(从main开始执行)
其中String[] args参数必须有(规定),为外界传入main方法的参数
若写为其他形式,则为方法重载
java-廖雪峰笔记-入门_第2张图片
为什么main方法定义在类里面?(C语言中main为主函数在外界)

java源码文件运行过程:

javac
java
HelloWorld.java..
HelloWorld.class..
excute.

在这里插入图片描述为什么只能定义一个public?

Java程序基本结构:

java是面向对象的语言,程序基本单位为class
面向对象基本单位都是class?
类名要求:

  • 类名必须以英文字母开头,后接字母,数字和下划线的组合
  • 习惯以大写字母开头

public表示class公开,不写也能正确编译,但是这个类将无法从命令行执行(什么意思?

定义变量:int x=1;无初始值时默认为0

基本数据类型:

整数类型:byte、short、int、long
浮点数类型:float、double
字符类型:char
布尔类型:boolean

java-廖雪峰笔记-入门_第3张图片

  • byte:-128 ~ 127
  • short: -32768 ~ 32767
  • int: -2147483648 ~ 2147483647
  • long: -9223372036854775808 ~ 9223372036854775807

浮点型:
float类型,需要加上后缀 f
float类型可最大表示 3.4 3.4 3.4x 1 0 38 10^{38} 1038
double类型可最大表示 1.79 1.79 1.79x 1 0 308 10^{308} 10308

**布尔型:**ture(1)or false(0)
Java语言对布尔类型的存储并没有做规定,理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。

**字符类型:**char使用单引号‘’
字符串string为双引号“”

引用类型(类似于c指针)

**常量:**定义变量时加final
final double PI = 3.14;
常量在定义初始化后不可再赋值
(根据习惯,常量名通常全部大写)

var关键字:
类型名太长写起来麻烦

StringBuilder sb = new StringBuilder();

省略变量类型为

var sb = new StringBuilder();

编译器会自动根据赋值语句判断类型

变量作用范围与c语言类似

位运算:
&与 |或 ~非
多位时 按二进制位运算

运算优先级
在Java的计算表达式中,运算优先级从高到低依次是:

  • ()
  • ! ~ ++ --
  • */ %
  • +-
  • << >> >>>
  • &
  • |
  • += -= *= /=

类型自动提升与强制转型(同C语言)

NaN表示Not a Number
Infinity表示无穷大
Infinity表示负无穷大

要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可,如:
int n2 = '中'; // 汉字“中”的Unicode编码是20013
可直接用转义字符\u+Unicode编码来表示一个字符,如:
char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013

字符串类型:String

null 空值不等于 空字符串“”

关键字new:

定义数组类型:
int[] ns = new int[5];

可用数组变量.length获取数组大小

定义时直接初始化
int[] ns = new int[] { 68, 79, 91, 85, 62 };
简写int[] ns = { 68, 79, 91, 85, 62 };

流程控制

输出:
System.out.println()
(println是print line的缩写)
若不换行可用print
格式化输出:
System.out.printf()通过占位符%?把后面参数 格式化为指定格式

占位符
%d 格式化输出整数
%x 格式化输出十六进制整数
%f 格式化输出浮点数
%e 格式化输出科学计数法表示的浮点数
%s 格式化字符串

输入:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // 创建Scanner对象
        System.out.print("Input your name: "); // 打印提示
        String name = scanner.nextLine(); // 读取一行输入并获取字符串
        System.out.print("Input your age: "); // 打印提示
        int age = scanner.nextInt(); // 读取一行输入并获取整数
        System.out.printf("Hi, %s, you are %d\n", name, age); // 格式化输出
    }
}

Scanner会自动转换数据类型,不必手动转换(???这句的意义在哪?)

判断值类型变量是否相等 用==
==在引用类型中表示引用是否相等(相当于地址)而不是内容
判断内容用***.equals();
如:s1.equals(s2);
(注: 如果变量s1null,会报NullPointerException
要避免,可用:
if(s1 != null && s1.equals(s2));或将可能是null的引用类型放在后面括号内

什么时候需要new
对象实例化的时候——————还不确定

new解释

for each循环,遍历数组:

public class Main {
    public static void main(String[] args) {
        int[] ns = { 1, 4, 9, 16, 25 };
        for (int n : ns) {
            System.out.println(n);
        }
    }
}

循环变量n不是计数器,而是直接对应数组每个元素。(无法指定遍历顺序,也无法获取数组索引)

break语句总是跳出自己所在的那一层循环

数组

Arrays.toString(),可以快速打印数组内容:

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));
    }
}

Arrays.sort()排序(从小到大):

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));
    }
}

要打印一个二维数组,可以使用两层嵌套的for循环:

for (int[] arr : ns) {
    for (int n : arr) {
        System.out.print(n);
        System.out.print(', ');
    }
    System.out.println();
}

Java标准库的Arrays.deepToString()打印多维数组:

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 }
        };
        System.out.println(Arrays.deepToString(ns));
    }
}

命令行参数:
命令行参数类型是String[]数组;

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

你可能感兴趣的:(java,java)