Java初学者从入门到精通(2)

简介: Java的基础语法、Java的面向对象。每一个知识点都讲解的非常细腻,由浅入深。适合非计算机专业,想转行做Java开发的朋友,或者您想让Java基础更扎实的同学

接前文:https://developer.aliyun.com/article/852973

站播放量最高的Java零基础视频教程:

https://www.bilibili.com/video/BV1Rx411876f


Java标识符

标识符用来表示变量、方法或类等的名字。

定义的规则如下:

  • 只能包含字母、数字、下划线和美元符号$。
  • 不能以数字开头
  • 严格区分大小写,如 a 和 A 是不同的标识符
  • 没有长度限制

注意:标识符的命名应该有自明性(见名知意),看到名字就可以知道这个标识符表示的内容。


1、下面是一些合法的标识符(名称):

     myName,My_name,Points,$points,_sys_ta,OK,_23b,_3_

2、以下是一些非法的标识符:

    2thupk,high-dig,Not/ok,#name


使用标识符进行命名的时候,我们会遵循下面的定义风格:

  • 变量名:第一个单词的字母小写,后面每个单词的首字母大写。如person,personName。
  • 方法名:第一个单词首字母小写,后面每个单词的首字母大写。如eat(),showName()。
  • 类名:以大写字母开头。如Home,Hello。
  • 常量:全部大写。如PI,NUMBER。

注意:定义风格与语法没有关系,但是一个优秀的程序员都会按照这个要求规范自己的代码。


关键字和保留字

  • 正确识别Java语言的关键字(keyword)和保留字(reserved word)是十分重要的。
  • Java的关键字对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等。
  • 保留字是java预留的关键字,他们虽然现在没有作为关键字,但在以后的升级版本中有可能作为关键字。所以我们在等一标识符的时候,不能与它们冲突,否则代码不能正常执行。

目前的保留字:const,goto


关键字如下:




分隔符;

空格、圆括号、花括号、分号等。

每条语句无论一行还是多行都以分号结束。

代码块(Block)是包含在{}里面的多条语句,块可以嵌套。

空白由一个或多个空格组成,也可以由一个或多个tab空格组成。




注释:

Java支持单行及多行注释,注释中的内容会被编译器忽略。

单行注释:以换行符结束。语法:

//......


多行注释:可同时注释很多内容。语法:

1. /*......
2. 
3. ......*/


文档注释:可使用javadoc工具从源代码和文档注释中将信息取出,转换为HTML文件。语法:

1. /**
2. ..........
3. ..........
4. */


Java数据类型划分




基本数据类型


 



变量和常量

变量:用于标识数据的存储单元,可用于数据存储和运算。各种类型的变量创建后都有默认值。

变量的定义一般格式如下:

    <数据类型><变量标识符>=<值>;

double x = 3.1415;


变量赋值后可以修改,格式如下:

    <变量标识符>=<值>;

x = 1.2345;


注意:在Java中,所有的变量在使用之前必须声明。

    常量有字面量和符号量两种。

    字面量表示基本数据类型的源代码,如整型字面量:6

    符号常量指用标识符表示的常量。

    定义的一般格式如下:

    <final><数据类型><符号常量标识符>=<常量值>;

例如:

1. final double PI = 3.1415926;
2. 
3. final int COUNT=1000;

注意:常量一旦赋值不能修改。


实型数据

  • 实型常量

用十进制数形式表示,由数字和小数点组成,例如:3.25。

用科学计数法形式表示,例如:123E-3。

数后加f或F为float,加d或D为double,没有后缀修饰的则缺省为double类型。

  • 实型变量

实型变量按长度分为:float和double。

双精度浮点型double比单精度浮点型float的精度更高,表示的数据的范围更大。

  • 三个特殊浮点值

正无穷大:Double.POSITIVE_INFINITY

负无穷大:Double.NEGATIVE_INFINITY

非数字:Double.NaN

注意:Double.NaN=Double.NaN的值为true。


字符型数据

    字符常量是单引号括起来的一个字符,如:'J'、'*'。

    Java中有以反斜杠(\)开头的字符,反斜杠将其后的字符转变为另外的含义,称为转义字符。


 


      Java中的字符型数据是16位的Unicode字符,汉子和英文字母占的内存空间相同。

     "Java你好"共12个字节。


字符变量的定义如下:

char ch=‘c’;


     字符串常量数据

     字符串常量是使用双引号括起来的字符序列。

例如:

1. "Let's learn Java!";
2. 
3. String str = "Hello world";


字符串变量作为对象来处理,通过String和StringBuffer类的构造方法来定义。

String s = new String();

布尔型数据

布尔型常量值只有:true和false。

布尔型变量为boolean类型,取值为true和false。例如:

boolean b =true;


类型转换

    自动类型转换:低优先级的数据自动会转换为高优先级的数据

    byte->short->char->int->long->float->double

    强制类型转换:优先级高的数据转换成优先级低的数据。例如:

1. double d =3.14159d;
2. 
3. int a=(int)d;


如果下列两个条件都满足,那么将一种类型的数据赋给另一种类型变量时,讲执行自动类型转换。

  1. 两种类型兼容
  2. 目标数据类型的取值范围比源数据类型的取值范围大

当满足以上两个条件时,自动的“加宽转换”就可以进行。


例如:将一个byte值赋给int类型的变量

1. byte a =10;
2. int x =a;

对于加宽转换,数字类型,包括整数和浮点类型都是彼此兼容的,但是数字类型和字符类型或布尔类型是不兼容的。字符类型和布尔类型也是互相不兼容的。

当需要将int型的值赋给一个byte型的变量时该怎么办?

此时,只有采用被称为“变窄转换”的转换方式。因为你肯定要将源数据的值变小才能适合目标数据类型。

在这种情况下,就必须进行强制类型转换。所谓的强制类型转换是一种显示的类型变换方式,其通用格式:(target-type) value

其中,目标类型(target-type)制定了要将指定值所转换成的类型。


例如,下面的程序段将int型强行转换成byte型。

1. int a;
2. byte  b;
3. b = (byte)a;

当把一个浮点值赋给整数类型时,将发生一种不同的类型转换:截断

即当把浮点值赋给整数类型时,它的小数部分将被舍去。

例如,如果将值1.23赋给一个整数,其结果只是1,0.23被舍弃。

当然,如果浮点值太大而不能适合目标整数类型,那么它的值将会因为目标类型值域取模而减少。

下面的这个程序说明了强制类型转换过程。

1. public class Conversion {
2. 
3. public static void main(String args[]){
4. 
5.         byte b;
6. 
7. int i = 258;
8. 
9. double d = 338.136;
10. 
11.         System.out.println(“\n将int类型数据转换为byte");
12. 
13.         b = (byte) i;
14. 
15.         System.out.println("i and b: " + i + “, " + b);
16. 
17.         System.out.println(“\n将double类型数据转换为int");
18.         i = (int) d;
19. 
20.         System.out.println("d and i :" + d + " ," + i);
21. 
22.         System.out.println(“\n将double类型数据转换为byte");
23. 
24.         b = (byte) d;
25. 
26.         System.out.println("d and b: " + d + “, " + b);
27.     }
28. }

运行结果如下:

将int类型数据转换为byte

i and b: 258, 2

将double类型数据转换为int

d andi: 338.136 ,338

将double类型数据转换为byte

d and b :338.136, 82


下面让我们分析一下每个类型转换。

当值258被强制转换为byte变量时,取值它的低八位;

当把变量d转换为int型,它的小数部分被舍弃了;

当把变量d转换为byte型,它的小数部分被舍弃了,也是取它的低八位。


赋值运算符

包括:=,+=,-=,*=,/=,%=

1. int a=2;
2. 
3. a =a*b;
4. 
5. a*=b;
6. 
7. a%b=b;
8. 
9. a =a%b;


算术运算符

包括:+,-,*,/,%,++,--等

后缀++(--):变量首先进行操作再自身进行加减。

1. int a=2;
2. 
3. int b =a++;
4. 
5. //a=3,b=2

前缀++(--):变量首先加减后再进行操作。

1. int a=2;
2. 
3. int b=++a;
4. 
5. //a=3,b=3


关系运算符

包括:==,!=,<,<=,>,>=

完成操作数的比较运算,结果为布尔类型值。

1. int a=10;
2. 
3. int b=3;
4. 
5. boolean f=a>b;
6. 
7. //比较a和b的值,结果为true,即f的值为true


逻辑运算符

     包括:&,|,!,^,&&,||

注意区别:&既是位运算符也是逻辑运算符,&&只是逻辑运算符,&与&&同时作为逻辑运算符时&&是短路的(截断功能),而&并不短路。

1. int a=6;
2. 
3. int b=8;
4. 
5. int c=10;
6. 
7. int d=12;
8. 
9. boolean x=++a>b++&&c++>d--;
10. 
11. 
12. //上面代码的结果:
13. //a=7   b=9  c=10  d=12   x=flase


条件运算符

也称作三目运算符

一般形式为:

<表达式1>?<表达式2>:<表达式3>;

表达式1的数据类型为布尔值类型,如果为true,取表达式2的值为最终结果,否则取表达式3的值。

  • 按位取反〜,〜01010101=10101010。 (1变0 0变1)
  • 按位与&,11111001&10001111=10001001。 (同为1时为1 )
  • 按位或|,11111001|10001111=11111111。 (只要有一个为1就为1)
  • 按位异或^,11111001^10001111=01110110。 (相同为0 不同为1)
  • 左移<<,10101011<<2=10101100。
  • 带符号右移>>,10101011>>2=11101010。
  • 无符号右移>>>



表达式

由操作数和运算符按照一定的语法格式组成表达式。

(a+b)*(c--d)


变量的作用域

  • 所谓的作用域就是在变量在什么时候是可见在什么是不可见的!
  • 作用域决定变量“可见性”与“存在时间”
  • 作用域的范围:只作用于从声明开始到所在的{}结束。


简单的输入输出

输出:

使用System.out对象进行输出。

println():输出文本并换行

print():输出文本不换行

如:System.out.println(“hello world!”);

输入:

1、使用Scanner对象输入。

new Scanner(System.in)

import java.util.Scanner与next()或nextInt()方法

2、使用命令行参数main()方法的args[]。

相关文章
|
1月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
50 3
|
12天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
18天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
24天前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
65 5
|
22天前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
32 1
|
28天前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
45 3
|
30天前
|
Java
Java中的多线程编程:从入门到精通
本文将带你深入了解Java中的多线程编程。我们将从基础概念开始,逐步深入探讨线程的创建、启动、同步和通信等关键知识点。通过阅读本文,你将能够掌握Java多线程编程的基本技能,为进一步学习和应用打下坚实的基础。
|
1月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
51 1
java制作游戏,如何使用libgdx,入门级别教学
|
1月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
45 4
|
30天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
23 1
下一篇
无影云桌面