Java学习之路之week1
向Java程序员的目标前进!
学习内容
day0(准备阶段)
学习Java的第一天,先熟悉计算机和Java基本概念,再搭建开发环境,写个Helloworld程序并测试一下。
计算机基础知识扫盲
都是一些零碎的知识点
-
计算机:是一种能按程序运行,自动、高速处理海量数据的现代化智能电子设备。计算机由硬件和软件组成,没有安装任何软件的计算机称为裸机。
-
软件分为系统软件和应用软件。常见系统软件有DOS系统、Windows系统、Linux系统、mac系统。
-
软件结构的划分:分为C/S结构和B/S结构。
-
C/S结构(Client-Server)—客户端和服务器端的交互
C/S结构的特点:客户端的软件需要升级才能使用服务器高版本功能
-
B/S结构(Browser-Server)—浏览器端和服务器端的交互
B/S结构的特点:只要保证计算机中存在浏览器客户端即可,不需要特定升级访问服务器网站
-
-
软件开发:使用特定的开发工具完成软件的制作过程
-
人机交互方式:分为人和人、人和计算机、图形界面化和命令行方式,其中命令行方式是我们要研究的。
DOS常用命令
在Windows系统下,进入DOS控制台常用2种方式。
Win10系统左下方—>开始菜单—>输入cmd—>命令行提示—>右键—>选择管理员身份运行—>进入DOS
Windows键+R键—>输入cmd—>进入DOS
- 盘符切换:直接输入盘符号,比如下面的
C:\Users\xxx>d:
-
dir:罗列当前目录/盘符所有的文件以及文件夹的信息
-
cd:在这里介绍cd三种功能
//进入单级目录
D:\>cd xxx
//进入多级目录
D:\>cd D:\xxx\day0\code
//cd.. 回退上一级目录
D:\xxx\day0\code>cd..
//cd\ 直接从多级目录中回退到根目录下
D:\xxx\day0\code>cd\
-
cls:清屏命令
-
md:创建文件夹命令
D:\xxx\day0\code>md MyFirstJava
- copy con:创建文件的命令之一
/*
copy con 文件名称(带后缀)--->按回车--->进入编辑内容模式
编辑完内容之后,按ctrl+z编辑完成--->按回车保存退出
*/
D:\xxx\day0\code\MyFirstJava>copy con a.txt
Hello,this is my First Java class^Z
已复制 1 个文件。
- del:删除文件命令,有2种模式
//删除单个文件
D:\xxx\day0\code\MyFirstJava>del a.txt
//批量删除文件
D:\xxx\day0\code\MyFirstJava>del *.txt
- rd:删除目录(文件夹)命令,有3种模式
//rd 目录名称 (特点:只能删除空目录)
D:\xxx\day0\code>rd MyFirstJava
//rd的扩展命令:删除带内容的目录,细分为询问和不询问
// rd /s 目录(文件夹)名称:询问方式
D:\xxx\day0\code>rd /s MyFirstJava
// rd /s /q 目录(文件夹)名称:不询问方式,暴力删除,不建议使用
D:\xxx\day0\code>rd /s /q MyFirstJava
-
ipconfig和ping命令
ipconfig:Windows下查看我们的ip地址(ipv4)
ifconfig:Linux系统 查看ip地址ping ip地址:查看自己主机和其他机器之间是否能够通信
Java语言相关概念
-
Java语言诞生:詹姆斯·高斯林(James Gosling)于1995年创建Java。
-
Java语言的平台版本:JavaSE/JavaME/JavaEE
JavaSE:针对桌面应用程序的开发
JavaME:针对嵌入式设备提供的一套解决方案
JavaEE:针对企业级开发的解决方案
-
JDK、JRE、JVM:
JDK(Java Development Kit)是Java开发工具包
JRE(Java Runtime Environment)是Java运行环境,是JVM和运行时所需要的核心类库
JVM(Java Virtural Machine)是Java虚拟机,能使不同的操作系统运行Java程序,充当“翻译”的作用。
其中JDK>JRE>JVM
-
Java语言重要特点:开源和跨平台
跨平台:不同的操作系统在电脑上通过对应版本的JVM运行Java文件。形象一点来说就是“一处编译,到处浪”。
安装Java环境
下载地址(需要登录Oracle账户):
https://www.oracle.com/java/technologies/downloads/#java8-windows
安装过程略,主要说下注意事项:
- 不要安到系统盘(C盘)
- JDK和JRE最好放在同一目录下
- 安装完要配环境变量
day1
配置环境变量
为什么配置环境变量:为了让我们书写的java文件在任何目录或者任何盘符下都能够编译,需要配置Java环境变量(系统变量)。
-
配置path环境变量的两种方式
-
把JDK安装路径下的bin文件夹的整个地址复制到系统环境变量的path变量中(不推荐)
步骤:win10—>桌面—>此电脑—>右键—>属性—>高级系统设置—>选择环境变量
-
先复制jdk的完整安装目录,在系统变量中创建名为“JAVA_HOME”的系统变量,然后在path系统的变量中添加名为“%JAVA_HOME%\bin”的内容(推荐)
-
写个HelloWorld程序
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello world!") ;
}
}
关键字/注释
关键字:被Java语言赋予特定含义的单词
在IDE(集成开发环境)和高级记事本中,关键字会以特殊颜色显示。
关键字有class、public、static等,随着学习会不断地积累。但需要注意关键字都是小写。
class:Java中最基本的单元 (类)
public:权限修饰符(目前一直使用的:后期面向对象讲其他的)
公共的/公开的(任何人都可以访问的),访问权限足够大
static:静态修饰符(最基本的概念:共享/共用) 后期面向对象中讲解
void:和方法有关系
注释:提高程序的阅读性,还能排除错误
Java中的注释分为单行注释、多行注释和文档注释。
//单行注释 : // 后面写解释代码的文字
/*
多行注释: 多行内容加上文字描述
*/
/**
文档注释 :后期可以通过jdk的bin目录有一个javadoc.exe
解析文档注释的 (上面的两个注释不能被解析)
*/
day2
标识符
标识符是一种给类、接口、方法、变量、常量等起名字的一个字符序列,在命名时必须“见名知意”。
标识符的组成规则:由字母、数字、下划线和美元符号组成。
组成标识符的注意事项:
- 不能以数字开头
- 严格区分大小写
- 不能以关键字命名
命名习惯:
-
给类和接口起名——”大驼峰命名法“
如果当前类名/接口 是一个单词:那么首字母大写,其他字母小写;如果当前类名/接口是多个单词:那么每一个单词的首字母都大写,其余小写。
-
给方法和变量起名——”小驼峰命名法“
如果是一个单词,则全部小写;如果是多个单词,则第一个单词首字母小写,后面单词首字母都大写。
-
给常量起名
如果是单个单词,则字母全部大写;如果是多个单词,则字母全部大写且每个单词间用下划线隔开。
常量
常量:在程序执行过程中,值不变的量。
常量的分类:大体分为2类,是字面值常量和自定义常量。
字面值常量:分为6种
- 字符串常量
- 字符常量
当字符不参与运算的时候:本身就是描述的就是字符本身的值;当字符参与运算的时候,字符就会寻找对应的ASCII码表的值,进行运算!
System.out.println('A'+1) ;//+运算符符号了,会找到A对应的ASCII码表的值65,再加1输出。
System.out.println('A') ;//输出字符A
-
整数常量
-
浮点数常量
-
布尔常量
-
空常量
自定义常量:待续,面向对象中再讲
进制计算及其转换
进制计算
进制是人为定义的带进位的计数方法,主常用的有十进制、二进制、八进制和十六进制。
其中二进制以“0B”开头,逢2进1;
八进制以“0”开头,逢8进1;
十进制是整数默认类型,逢10进1;
十六进制以“0x”开头,逢16进1;
在Java中,会将二进制、八进制、十六进制数自动转换为十进制输出。
进制转换
-
任意进制—>十进制
采用位权展开法——将当前系数乘以基数的权次幂再相加
-
十进制—>任意进制
采用除基取余法——数据本身除以基数,取余数,直到除到商为0为止,最后将余数反转。
-
二进制—>十进制
采用8421码(BCD码的一种)——将二进制数比特位是1的数据对应的十进制数据加起来得到结果
-
二进制—>八进制
利用进制原理转换——将二进制数从右向左每三个比特位一组,换算出十进制数,再从左往右将数据排列起来,得到结果。
-
二进制—>十六进制
利用进制原理转换——将二进制数从右向左每四个比特位一组,换算出十进制数,再从左往右将数据排列起来,得到结果。
注意:在二进制转八或十六进制中,从右向左数的时候,高位没有数就补0。
-
X进制—>Y进制
具体情况具体分析,但是可以转为二进制或十进制后再进行转换,
变量
变量:在程序执行过程中,值会变的量。
变量的三要素:数据类型,变量名和初始化值。
Java数据类型(思维导图)
day3
变量-续
定义变量的注意事项
-
定义long类型必须在值的后面加上标记:
L或者l 这样就表示定义的是长整型的变量 -
浮点类型默认double,定义单精度float类型的时候,后面的值需要加上标记:F或者f即可!
-
同一变量不可重复定义,这种情况是因为Java是一个强类型语言
强类型语言:语法和格式是非常严谨的! (比如Java语言)弱类型语言:语法和格式相对来说不那么严谨(比如JavaScript语言)
-
实际开发中,不建议同一行上定义多个变量(不适合阅读)
-
定义整数类型时要注意数据类型的范围
-
浮点类型默认double
-
布尔类型 boolean 不参与运算,它只是描述逻辑判断的结果(true/false)
-
方法定义中的变量:局部变量,它在使用之前必须进行初始化否则报错!
(1)要么定义的变量的时候就初始化了
数据类型 变量名 = 初始化值;
(2)要么就先去定义,然后在使用之前必须初始化
数据类型 变量名; //声明变量
变量名 = 初始化; //然后初始化了 -
语句都是以分号结束
-
两个变量要进行求和——数据在进行计算的时候,应该要保证数据类型一致!
数据类型转换
自动类型转换(隐式类型转换):
byte、short、char三者之间不转换,但是分别自己参与运算的时候,优先提升为int—>long—>float—>double
强制类型转换(显式类型转换):
当变量进行相加计算的时候,如果接收的类型范围小于计算结果的数据类型,就需要使用Java的强转类型转换,使数据进行类型匹配。
显示转换(强制类型转换)不仅适用于基本类型,引用数据类型
格式:
目标数据类型 变量名 = (目标数据类型)(结果) ;
实际开发中,尽量避免强转类型转换,可能会造成数据精度损失
运算符
运算符分为算术运算符、赋值运算符、关系(比较)运算符、逻辑运算符、位运算符和三元运算符
算术运算符
基本的算术运算符号:+、-、*、/(默认取整)、%(模:求余数)
如果小数需要精确计算,Java提供了一个类使用:BigDecimal
扩展的算术运算符:++和–
++或者–如果在数据的前面,先自增或者自减,然后在参与运算
++或者–如果在数据的后面,先运算,然后在自增或者自减
class Demo1{
public static void main(String[] args){
//++或者--如果在数据的前面
int x = 4 ;
int y = 5 ;
System.out.println("x:"+x+",y:"+y) ;
//int m = ++x ;
//int n = --y ;
//b++或者--在数据的后面
int m = x++ ;
int n = y-- ;
System.out.println("x:"+x+",y:"+y) ;
System.out.println("m:"+m+",n:"+n) ;
}
}
赋值运算符
基本赋值运算符 :=
将等号右边的数据赋值给等号左边的变量,不能写成==
扩展赋值运算符 :+=、-=、*=、/=、%=
将等号右边的数据和等号左边的变量运算然后将结果在赋值给等号左边的变量
特点:隐藏了强制类型转换,比如下面这个例子:
class Demo2{
public static void main(String[] args){
short s = 1;
//s = s + 1 ;会报错,因为是左右两边是不兼容的类型: 从int转换到short可能会有损失
//s = (short)(s+1) ;
//System.out.println("s的值是:"+s) ;
s+=1 ; //扩展赋值运算符,等价于:s = (short)(s+1);
}
}
关系(比较)运算符
关系运算符有<、>、<=、>=、!=、==
比较运算符的表达式无论简单还是复杂,最终的返回结果都是一个布尔类型的值(true或false)
注意:==不能写成=
逻辑运算符
逻辑运算符有与&、或|、非~、异或^、双与&&、双或||
逻辑单与& (并列关系),特点:有假则假,条件必须同时满足才成立
逻辑单或| (或的关系),特点:有真则真,满足一个条件即可成立
逻辑双与&& (并列关系),特点:有假则假,如果左边为假,右边就不执行了(短路效果)
逻辑双或| |(或的关系),特点:有真则真,如果左边为真,右边就不执行了(短路效果)
双与双或的好处:提高逻辑判断的执行效率,开发中经常使用连续的逻辑双与&&和逻辑双或||,以节省局部变量在(栈内存)内存中内存空间,提高执行效率!
逻辑异或^,特点:相同为假,不同为真
逻辑非! ,特点:逻辑取反,偶数个非是它本身
day4
运算符-续
位运算符
位运算符:利用补码对当前数据进行计算,分为位与&、位或|、位异或^、~反码和移位符号
位与&:有0则0
位或|:有1,则1
位异或^:相同则为0,不同则为1
注意:一个数据被另一个数据如果位异或两次,其值是它本身!
~反码:全部按位取反(0变1,1变0)
移位符号:
<< | 算术左移 |
---|---|
>> | 算术右移 |
>>> | 无符号右移 |
位运算符的细节:
位运算符的细节 | |
---|---|
<< | 将数据(补码)向左移动,丢弃高位数字,右边补0(相当于乘以2的移动次幂) |
>> | 正数右移,空缺位补0;负数右移,最高位补1。 |
>>> | 空缺位补0。 |
& | 任何二进制位和0进行&运算,结果是0;和1进行&运算结果是原值。 |
| | 任何二进制位和0进行&运算,结果是0;和1进行&运算结果是原值。 |
^ | 任何相同二进制位进行 ^ 运算,结果是0;不相同二进制位 ^ 运算结果是1。 |
三元运算符
三元运算符类似于选择结构语句(流程控制结构后面学习),表达式可以非常简单也可以非常复杂。
三元运算符的格式:
(表达式)?执行 true的结果:执行false 的结果;
流程:
首先判断表达式是否成立。如果成立则执行true的结果,否则执行false的结果
键盘录入数据
在写程序的过程中,想让程序更加灵活,就需要使用Scanner类,这是JDK提供的一个类,相当于一个“简单的文本扫描器”。
操作步骤
-
导包 import(关键字) java.util.Scanner ; 必须在class上面
-
创建一个文本扫描器对象(键盘录入对象)
固定格式
Scanner 对象名(自己起名字) = new Scanner(System.in) ; -
友情提示并录入数据(比如录入整数)
System.out.println(“请您输入一个数据:”) ;
int 接收的变量名 = 对象名.nextInt() ;nextInt() ;键盘录入Scanner的方法
然后 "接收的变量名 “输出出来”
下面写个简单程序来展示:
import java.util.Scanner;
class SCannerDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Please input a number:");
int a = sc.nextInt();
System.out.println("Your input number is "+a);
}
}
第一次写博客,难免会产生一些错误。如果写的有什么问题,欢迎大家批评指正。