Java学习路线-1:编程入门

简介: Java学习路线-1:编程入门

1、编程基础自测考试


2、Java发展简介

完善的生态系统

OAK(橡树)平台

HotJava浏览器

sun: Stanford University NetWork


Java 标准开发 J2SE、JAVA SE

Java 嵌入式开发 J2ME、JAVA ME

Java 企开开发 J2EE、JAVA EE


3、Java语言特点

1、行业内通用的技术实现标准

2、面向对象编程语言

3、提供了内存回收处理机制

4、避免了复杂的指针问题

5、支持多线程编程

6、高效的网络处理能力

7、良好的可移植性

8、语言足够简单


4、Java可移植性

JVM Java虚拟机(Java Virtual Machine)

JVM 调优问题


编译型 + 解释型


Java源文件.java -> 字节码.class -> 机器码


5、JDK简介

生产环境使用JDK1.8

JDK Java Development Kit(包含JRE)

JRE Java Runtime Envrinment


6、JDK安装与配置

环境变量配置

Windows: Path


编译命令:javac.exe

解释命令:java.exe


7、编程起步

源代码:Hello.java

public class Hello{
    // 中括号[] 可在变量名前,也可以在后
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

编译执行

$ ls

Hello.java

$ javac Hello.java # 编译文件为字节码文件
$ ls
Hello.class Hello.java

$ java Hello # JVM执行java程序
Hello World!

1、定义类:

public class 类名 {}   // 类名必须与文件名一致
class 类名 {} // 类名可以与文件名不一致

在一个.java文件中,可以有多个class定义

一个java文件中,只能有一个public class(推荐)

命名规范:每个单词的首字母大写

2、主方法

程序执行起点,一定要定义在类中

主方法所在类,称为主类

3、系统输出

System.out.println();  // 输出换行  line  
System.out.print(); // 输出不换行

8、JShell工具

JDK > 1.9

$jshell
jshell>

9、CLASSPATH环境属性

默认为当前所在目录

export CLASSPATH=.  # Linux
set CLASSPATH=. # Windows 可配置为系统变量
PATH       # 操作系统提供的路径配置,定义所有可执行程序路径
CLASSPATH # JRE提供的加载类的路径

10、注释

编译时不处理注释

// 单行注释  
/ 多行注释 /
/* 文档注释 /

11 标识符与关键字

标识符:

包含:字母、数字、_、$ 
字母开头

关键字

特殊含义,如class

JDK 1.4 assert 用于异常处理

JDK 1.5 enum 用于枚举定义

未使用:goto、const

特殊含义:true、false、null

12、Java数据类型简介

分类

基本数据类型:具体的数字单元
数值型
-整型:byte-8、short-16、
int-32、long-64 # 默认值 0
-浮点型:float-32、double-64 # 默认值 0
布尔型:boolean # 默认值 false
字符型:char-16 # 默认值 \u0000

引用数据类型:涉及内存关系的使用
数组、类、接口 # 默认值null

参考原则

描述数字:整数int、小数double

数据传输、文字编码转换:byte(二进制操作)

处理中文:char

描述内存或文件大小,自增主键:使用long

13、整型数据类型

定义

// int 变量名称 = 常量;
int x = 10;

范例:超过int范围

数据溢出


// int int变量 = int数值
int max = Integer.MAX_VALUE; // 获取int最大值
int min = Integer.MIN_VALUE; // 获取int最小值
System.out.println("min: " + min);
System.out.println("max: " + max);

// int变量 + int常量 = int结果
System.out.println("max + 1: " + (max + 1));

System.out.println("=================");

// long long变量 = int数值
long long_max = Integer.MAX_VALUE;
long long_min = Integer.MIN_VALUE;
System.out.println("long_min: " + long_min);
System.out.println("long_max: " + long_max);

// long变量 + int常量 = long结果
System.out.println("long_min + 1: " + (long_max + 1));

/*
min: -2147483648
max: 2147483647VAl
max + 1: -2147483648
=================
long_min: -2147483648
long_max: 2147483647
long_min + 1: 2147483648
*/

数值常量默认是int

数值常量后面加L(推荐)或l转换为long型

long l = 123L;

自动类型转换:小类型 -> 大类型

强制类型转换:大类型 -> 小类型

long l = 123;       // 自动转换
int i = (int)123; // 强制转换(不建议)

byte b = 200; // 错误: 不兼容的类型: 从int转换到byte可能会有损失

常量会自动转换

变量需要强制转换

14、浮点型数据

小数常量对应double

// 定义double
double x = 10.2;

// double + int = double

// 定义float
float x = (float)10.2; // 强制转换
float y = 10.2F;

// int / int => int
// 10/4=2

// (double)int / int => double
// (double)10/4 = 2.5

15、字符型

单引号’'描述

1、定义字符变量

// 定义字符变量
char c = 'B';

// 获取字符编码
int num = c;

任何编程语言的字符都可以与int进行转换

字符集

字符范围

数值

大写字母

‘A’-‘Z’

65-90

小写字母

‘a’-‘z’

97-122

数字范围

‘0’-‘9’

48-57


2、小写转大写示例

char a = 'a';
int num = a;
num = num - 32;

System.out.println((char)num); // A

3、保存中文数据

java使用Unicode十六进制的编码,可以包含任意字符

char a = '中';
int num = a;
System.out.println(num); // 20013

16、布尔型

// 定义布尔型
boolean flag = true;

// 执行判断逻辑
if (flag){
System.out.println("true");
}else{
System.out.println("false");
}
// true

部分编程语言不提供布尔型,使用0替代false,其他值替代true

java中布尔型的取值为:true,false

17、String字符串

任何编程语言里都没有提供所谓字符串这种基本数据

双引号""描述字符串

String str = "Hello";  // 字符串描述
str = str + " World"; // 字符串连接
str += "!";
System.out.println(str);
// Hello World!

Java中:数据范围大类型 + 数据范围小类型(自动转为范围大的类型)

如果有字符串String,所有数据类型都会转为String类型

System.out.println("数值计算结果:" + (1 + 1)); 
// 数值计算结果:2

System.out.println("字符拼接结果:" + 1 + 1);
// 字符拼接结果:11

转义字符, 多用于打印输出

Tab    \t
换行 \n
引号 \"
单引号 \'
斜线 \

18、运算符简介

所有的程序开发,都是一种数字的处理游戏

对于数字处理的操作模式就称为运算符

程序会提供基础运算符,存在优先级(括号优先级最高)

19、数学运算符

支持四则运算

简化运算符

+=、-=、*=、/=、%=

++变量、--变量:先进行变量自增自减,而后再进行数字计算
变量++、变量--:先使用变量进行计算,再进行变量自增自减

内存较少的时候使用,现在不推荐使用

int x = 10;
int y = 20;

// (++x) + (y--) => 11 + 20 = 31; x=11; y=19
int result = ++ x + y--;

System.out.println("result: " + result);
System.out.println("x: " + x);
System.out.println("y: " + y);

// result: 31
// x: 11
// y: 19

20、关系运算符

>、< 
>=、<=
== 比较
// = 赋值

所有的关系判断返回值都是boolean

数据类型之间提供自动转型支持,字符判断会自动转为int

char c = '中';
boolean flag = c > 1;

System.out.println(flag);
// true

21、逻辑运算符

三目运算符

关系运算 ? 满足时的内容: 不满足时的内容

判断字符大小, 嵌套层数不宜过多

int x = 10;
int y = 20;

// int max = x > y ? x : y;
int max;
if (x > y){
max = x;
} else{
max = y;
}

System.out.println(max);
// 20

22、位运算

直接进行二进制数据的计算处理

与 &
或 |
异或 ^
反码 ~
移位 << >>

十进制与二进制转换

数字除2取余

# 十进制转二进制
13 / 2 = 6 ...1
6 / 2 = 3 ...0
3 / 2 = 1 ...1
1 / 2 = 0 ...1

13 => 1101

# 将10从十进制转二进制
$ echo "obase=2;10"|bc

# 二进制转为十进制
8 4 2 1
1 1 0 1 => 8 + 4 + 1 = 13

位运算

13 1101
7 0111

& 0101 => 5
| 1111 => 15
^ 1010 => 10

移位计算

// 2的3次方  8
2 << 2 = 8

2 -> 0010 -> 1000 -> 8

区别 & && | ||


1、& | 位运算和逻辑运算

逻辑判断的时候,所有判断都要执行

位运算的时候只是对当前数据进行与和或处理


2、&& || 短路运算

&& 如果前面条件返回false,后续条件不再执行

|| 如果前面条件返回true,后续条件不再执行


23、IF分支结构

顺序结构,分支结构,循环结构


if语句 针对关系表达式进行判断处理的分支操作

if (boolean){

} [else {
// 可选
}]

24、SWITCH开关语句

可以判断

int、char、枚举、String(JDK >= 1.7)

如果没有在case后面追加break,那么会从case条件开始执行到最后

switch(数据) {
case 数值: {
[break;]
}
case 数值: {
[break;]
}
default: {

}
}

示例

String s = "Hello";

switch (s){
case "hello": {
System.out.println("hello");
break;
}
case "Hello": {
System.out.println("Hello");
break;
}
default: {
System.out.println("default");
}
}
// Hello

25、while循环

循环结构:某一段代码被重复执行

如果不修改循环条件,会造成死循环

// 至少执行 0 次 常用
while (boolean) {

}

// 至少执行 1 次
do {

} while (boolean); // 注意这里的分号

26、for循环

for (定义循环初始值; 循环判断; 修改循环参数) {

}

// eg:
int sum = 0;
for (int i = 1; i < 10; i++) {
sum += i;
}
System.out.println(sum);
// 45

while 和 for循环选择

1、明确循环次数,优先选择for循环

2、不知道循环次数,但是知道循环结束条件,选择while循环


27、循环控制

break 退出整个循环结构

continue 结束当前循环,直接进入下一次循环,可以实现部分goto功能


C语言中的goto 不建议使用

// 使用continue 跳出两层循环 不建议使用
Point: for (int i = 1; i < 3; i++) {
for (int j = 1; j < 3; j++) {
if (i == j) {
continue Point;
}
System.out.println(i + " + " + j + " = " + (i + j));
}
}

/*
不使用 continue Point;
1 + 1 = 2
1 + 2 = 3
2 + 1 = 3
2 + 2 = 4

使用 continue Point;
2 + 1 = 3
*/

28、循环嵌套

循环嵌套:循环语句中嵌套其他循环语句

嵌套层次越多,复杂度越高

实例1、打印乘法口诀表

for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j + " " + i + " = " + (i j) + "\t");
}
System.out.println();
}
/*
1 * 1 = 1
1 2 = 2 2 2 = 4
1 3 = 3 2 3 = 6 3 * 3 = 9
...
*/

实例2、打印金字塔

int sum = 5;  // 总行数

// 打印乘法口诀表
for (int i = 1; i <= sum; i++) {
// 打印空格
for (int j = 1; j <= sum - i; j++) {
System.out.print(" ");
}

// 打印星星
for(int k = 1; k <= i; k++) {
System.out.print("* ");
}

System.out.println();
}
/*
*

*

*
*/

29、方法的定义

方法method,函数function

方法本质:

方便使用者重复调用的一段代码块

前提:

方法在主类中定义,并且由主方法直接调用

public static 返回值类型 方法名称([参数类型 参数名...]){
// 方法要执行的代码
[return[返回值];]
}

返回值可以使用基本数据类型和引用数据类型


返回值类型要和定义返回值类型一致

不返回值使用void, 可以使用return结束调用


方法名命名规范:

第一个单词小写,后续单词首字母大写


30、方法重载

定义:方法名相同,参数的类型或个数不同的时候就称为方法重载

和返回值没有关系

开发原则:

方法重载,建议相同的返回值


eg:

System.out.println(10);
System.out.println('A');
System.out.println("hello");

自定义方法重载


public static void main(String[] args) {
int resultA = sum(10, 10);

int resultB = sum(10, 10, 10);

double resultC = sum(10.1, 10.2);

System.out.println(resultA); // 20
System.out.println(resultB); // 30
System.out.println(resultC); // 20.299999999999997

}

// 定义求和方法
public static int sum(int a, int b) {
return a + b;
}

public static int sum(int a, int b, int c) {
return a + b + c;
}

public static double sum(double a, double b) {
return a + b;
}

31、方法递归调用

递归调用:一个方法自己调用自己

注意:

1、一定要设置递归调用的结束条件

2、每次调用一定要修改传递的参数条件

递归不建议用,处理不当会造成堆栈溢出

while实现1-10累加

int x = 1;
int sum = 0;

while (x <= 10) { // 结束条件
sum += x;
x++; // 参数条件
}
System.out.println(sum); // 55

递归实现1-10累加

public static void main(String[] args) {
int s = sum(10);
System.out.println(s); // 55
}

public static int sum(int num) {
if (num == 1) { // 结束条件
return 1;
}
else {
return num + sum(num - 1); // 参数变化
}
}
            </div>
目录
相关文章
|
机器学习/深度学习 监控 算法
目标检测的发展与现状
目标检测领域发展至今已有二十余载,从早期的传统方法到如今的深度学习方法,精度越来越高的同时速度也越来越快,这得益于深度学习等相关技术的不断发展。
1900 0
|
机器学习/深度学习 人工智能 TensorFlow
利用深度学习实现图像风格迁移
【8月更文挑战第73天】本文通过深入浅出的方式,介绍了一种使用深度学习技术进行图像风格迁移的方法。我们将探讨如何将一张普通照片转化为具有著名画作风格的艺术作品。文章不仅解释了背后的技术原理,还提供了一个实际的代码示例,帮助读者理解如何实现这一过程。
|
JavaScript 前端开发
JavaScript Array map() 方法
JavaScript Array map() 方法
|
11月前
|
人工智能 运维 安全
阿里云先知安全沙龙(上海站) ——终端安全对抗及防护
终端安全现状面临多重挑战,包括传统签名技术失效、新型无文件攻击频发、专业人才匮乏、分支机构安全管理不足等。企业终端覆盖不全、日志缺失、策略更新依赖厂商,导致运营排查困难。钓鱼攻击手法愈发精细,静态和动态对抗加剧,攻击者利用正常权限入侵,窃取凭据。Web3技术发展使加密货币成为新目标,职业黑客盯上个人钱包和交易公司。防护升级需涵盖预防、检测、响应和运营四个阶段,借助AI和威胁情报降低告警量,提升整体安全水平。
|
11月前
|
人工智能 搜索推荐 物联网
3D大模型助力,15分钟即可训练高质量、个性化的数字人模型,代码已开放
《MimicTalk: 快速生成个性化3D数字人》介绍了一种创新方法,利用3D大模型在15分钟内训练出高质量、个性化的数字人模型。该方法基于NeRF技术,通过“静态-动态混合适应”实现高效训练,显著提升了数字人在视频会议、虚拟现实等领域的应用潜力。论文链接:https://arxiv.org/pdf/2410.06734
339 4
|
存储 人工智能 弹性计算
阿里云高性能计算负责人何万青:阿里云大计算加速HPC与AI融合
与AI相结合,高性能计算能够帮助科研人员将精力集中于专业领域。
阿里云高性能计算负责人何万青:阿里云大计算加速HPC与AI融合
|
设计模式 安全 Java
Python面向对象、继承的基本语法、单继承和多层继承、子类重写父类的同名方法、子类调用父类的同名方法、继承中的 init 、 多继承、私有权限、类属性、类方法、静态方法、多态、鸭子类型
称为类 B 继承类 A 特点: B类的对象可以使用 A类的属性和方法 优点: 代码复用.重复相同的代码不用多次书写. 名词: 类A: 父类 基类 类B: 子类 派生类 2. 单继承和多层继承[理解] 单继承: 如果一个类只有一个父类,把这种继承关系称为单继承 多继承: 如果一个类有多个父类,把这种继承关系称为多继承 多层继承: C–> B --> A 3. 子类重写父类的同名方法[掌握] 重写: 子类定义和父类名字相同的方法. 为什么重写: 父类中的方法,不能满足子类对象的需求,所以
804 1
Python面向对象、继承的基本语法、单继承和多层继承、子类重写父类的同名方法、子类调用父类的同名方法、继承中的 init 、 多继承、私有权限、类属性、类方法、静态方法、多态、鸭子类型
|
iOS开发 开发者
iOS iPhone手机弱网环境配置
iOS iPhone手机弱网环境配置
iOS iPhone手机弱网环境配置
|
安全 Linux 数据库
认识中小型局域网MAC地址及分类
认识中小型局域网MAC地址及分类
783 0
认识中小型局域网MAC地址及分类
|
域名解析 前端开发 JavaScript
浏览器是干什么的?底层原理是什么?
浏览器是干什么的?底层原理是什么?
750 0