目录
学习笔记
第一个程序
所有的Java程序的后缀*.Java,建立一个目录保存Java程序。使用EditPlus编写代码。下载安装教程:https://blog.csdn.net/weixin_43184774/article/details/98393253
java第一个程序:HelloWorld.java
public class HelloWorld{
public static void main(String args[]){
System.out.println('Hello world !');
}
}
java程序需要经过两步才能执行:
- 对源代码程序进行编译:javac HelloWorld.java,会形成HelloWorld.class的字节码文件。
- JVM进行编译,形成与平台无关的字节码文件(HelloWorld.class)
- 在JVM上进行程序的解释执行:java HelloWorld,(不需要加后缀)
对第一个程序解释:
在java程序开发中最基础的单元是类,所有的程序必须封装在类中。类的定义如下:
[public] class 类名{}
有没有public的区别:
1. “public class 类名{}” : 类名称与文件名称必须保持一致,一个*.java中只允许有一个*.class定义。
2. ”class 类名{}“:可以不一致,但是JVM进行解析过后,形成的文件名称:类名称.class。一个*.java中可以有多个class,编译过后会形成多个*.class文件。
结论:在以后的项目开发中,一个*.java文件最好只有一个 "public calss "。学习例外。类命名每个单词的首字母必须大写。
主方法
Java的主方法是程序执行的起点,必须定义在一个类中。主方法定义如下:
public class 类名{
public static void main(String args[]){
//程序
}
}
主方法名字可能很长。主方法所在的类称为主类,统一使用 public class 来定义。
屏幕打印输出
换行: System.out.println(输出内容)
不换行:System.out.print(输出内容)
JShell工具
Shell(脚本程序),可以运行程序,也可以交由一些文件进行保存。
显然可以直接用核心代码,减少了一些结构化的需求。使用“/exit”退出。
CLASSPATH环境属性
例子:定义CLASSPATH环境属性
SET CLASSPATH=d:\renjava
设置了CLASSPAT后,这样就可以在其它路径下运行,那么:JVM在解释程序时需要得到CLASSPATH的支持。默认情况下,解释的类是从当前目录下加载了文件。
例子:从当前路径加载类的设置
SET CLASSPATH=.
一些时候,安装Java开发程序,会修改默认配置,这时候需要自己又改回来。CLASSPATH是在一个命令下的配置,当关闭命令行时,配置会消失。可以设置为全局属性,直接在系统中追加一个属性信息。方法如下图:
面试题:PATH与CLASSPATH的区别?
- PATH: 是操作系统运行程序的加载路径配置,定所有可执行程序的路径。
- CLASSPATH: 由JRE提供,用于定义Java程序解释时类加载的路径,默认设置为当前目录加载,通过“SET CLASSPATH=路径”设置。
|- 关系:JVM --> CLASSPATH --->加载字节码文件
Java基本概念
注释
注释:是程序开发的一项重要技术,合理的注释可以使项目维护更加方便。
三类形式:
- 单行注释://
- 多行注释:/* ..... */
- 文档注释:/** ... */ 文档注释有很多选项,最好用开发工具控制。
标识符与关键字
程序可以看作结构的整合题,java中有不同的结构,如:类、方法、变量名等,不同的结构需要不同的说明。对结构命名由一些单词组成,要有意义。对于Java标识符的组成,由字母、数字、_、$组成,数字不能开头,不能使用关键字。
一般形式:字母开头,数字与下划线辅助。关键词是系统对于一些结构的描述处理。
Java数据类型划分
Java数据分类:基本数据类型、引用数据类型
每一种数据类型都有每种类型的保存范围
整型数据
整型数据类型一共四种:byte、short、int、long。java中任何一个整型常量默认的都是int(只要是整数就是int)。
如果超过int处理范围(数据溢出),超过时会循环。
处理方法:更换数据类型、类型转换
对于数据类型范围大的要转换到数据类型范围小的,必须使用强制数据类型转换。对于常量则可以自动适配转换,对于变量格式:
(数据类型)变量名
如:(long)num
byte类型,没有超过byte范围的常量可以自动转换为byte,对于变量只能使用强制转换。
浮点型数据
浮点型数据表示小数,Java中任意一个小数常量对应的类型是double。定义格式:
所有类型的转型是由范围小转化为大类型。默认的类型是double,可以定义范围较小的float变量,赋值时候就必须进行强制类型的转换。定义如下:
注意:整型不保存小数点 int 的 10/4=2
字符型
定义如下:
在任何的编程语言中,字符可以和int类型相互转换,即使用int可以获取字符对应的系统编码。
对应:
- “大写字母范围”:‘A’(65) ~ 'Z'(90);
- "小写字母范围":‘a’(97) ~ 'b'(122);
- "数字范围":‘0’(48)~ ‘9’(57);
大写与小写字母相差32,可以通过这种方式进行大小写字母转换,如下
这些操作与C语言一致,但是char类型可以保存中文数据。如下:
Java可以使用中文保存的原因:Java使用Unicode的16进制编码,特点是可以包含任意文章的内容(对汉字处理时,需要正常的切分字,不需要判断是否为正常字,如:word换行)。
布尔型
表示逻辑处理的运算结果,范围:true、false。定义如下:
一些编程语言没使用布尔而使用0、1,Java不这样做。
String字符串
任何编程语言都没有提供字符串这种基本数据类型,但都提供字符串的相应描述。java中字符串较为特殊,可以使用像普通变量那样使用赋值的方式进行字符串描述,使用“”描述,双引号定义的是字符串。如下:
可以使用“+”进行字符串连接,如下:
“+”由有两种描述:数字的加,字符串的加。
结果:10.120
原因数据范围大的与数据范围小的进行运算时,会自动向大的转换。所有与String运算时,所有类型无条件向大的类型转换。
结果:30.1
描述字符串时,可以使用转义字符进行描述与处理,例如:TAB(\t)、“(\“)、\(\\)等。
运算符
处理优先级:使用括号。希望编写简单易懂的代码。
数学运算符
四则运算,注意简化:+=
求模,如下:
结果为1
最好不要用这种方式。
关系运算符
主要特征是进行大小比较处理:>、<、>=、<=、!=、==。判断结果为布尔值。
结果为:true
数据类型之间提供有自动转型的支持,在进行判断时会自动转换为int后判断。
三目(赋值)运算符
使用较多,合理运用可以避免大范围的程序编写。是进行逻辑关系判断后,进行赋值的处理。基本语法如下:
关系运算?满足关系时内容:不满足关系时内容
三目运算可以进行嵌套处理,如下(可读性差):
位运算符
主要进行二进制的数据处理:与(&)、或(|)、非(~)、异或(^)、移位处理。
要理解位操作,一定要清楚十进制与二进制的转换:数字除以二取余。
java是保存32位,二进制转十进制:1 2 4 8 16.... (按位乘)。
与:13 & 7 结果:5 或 :13 | 7 结果:15
13的二进制:00000000 00000000 00000000 00001101
7的二进制: 00000000 00000000 00000000 00000111
与: 00000000 00000000 00000000 00000101 ------5
或: 00000000 00000000 00000000 00001111 -------15
移位处理:
2 的二进制: 00000000 00000000 0000000 00000010 ----2
向左移2位: 00000000 00000000 0000000 00001000 ----8 2<<2
面试题: 请解释&与&&、|与||的区别?
- &与|,进行位运算与逻辑运算
在进行位运算时,只对当前条件和数据进行处理
在进行逻辑运算,所有判断条件都要执行
- 在逻辑运算上还可以使用&&与||
&&:当前面的条件返回false,后面的条件将不再判断,结果false
||: 当前面的条件返回 true,后面的条件将不再判断,结果true
Java程序逻辑控制
在程序开发中,一般存在三种l逻辑结构:顺序结构、分支结构、循环结构。
分支结构
IF分支结构
SWITCH开关语句
switch是开关语句,基于内容进行判断,判断的只能是数据(int、char、枚举、String),不能够使用逻辑判断。
switch(数据){
case 数值:{
数值满足时执行;
[break;]
}
case 数值:{
数值满足时执行;
[break;]
}
[default:
所有数值判断都不满足时执行;
[break;]
]
}
循环结构
while循环结构
循环结构表示某一段代码被重复执行的操作,while两种形式的定义,如下:
注意:修改循环条件,避免死循环。
while循环先判断后执行;do...while先执行一次后判断,然后再执行,最好不用;
for循环
语法如下:
循环控制
循环控制语句:break、continue;
break退出整个循环结构
continue结束当前一次调用(结束当次循环)
continue实现goto部分功能方式如下(最好不用):
循环嵌套
循环嵌套的层数越多,时间复杂度越高。例子:打印三角形
方法的定义与使用
在程序之中需要重复执行一些代码,称为方法(method)(也可称为函数(function))。
下面的学习:方法在主类中定义与调用。
方法的基本定义:
在主类中定义与调用的形式如下:
public static 返回值类型 方法名称([参数类型 变量,....]){
// 该方法的需要执行的代码
[return [返回值]; ]
}
返回值中就可以使用Java的数据类型(基本数据类型、引用数据类型),在方法之中可以进行返回数据的处理。如果要返回数据,使用return描述;return的所返回的数据类型要和返回值类型保持一致,如果无返回值使用void进行声明。
关于方法名称与变量的命名要求:
- 方法名称:第一个单词的首字母小写,之后的字母大写
- 变量命名:与方法名称同样的命名规则
例子:定义一个无参数无返回值的方法,如下:
方法的本质方便使用者重复调用,所有的程序从主方法开始依次向下执行。
例子:定义一个有参数有返回值的方法,如下:
在进行方法定义的时候,如果方法的返回值类型为void时,可以使用return来结束调用。例子,如下:
Java定义方法时,不可能太长,最多几十行。
方法的重载
方法重载:当 方法的名称相同,参数的了类型或个数不同时,称为方法的重载。
例子:编写一个加法代码,实现两个int型、三个int型、两个double型。
同一个方法名称可以通过不同的参数类型或不同的方法体进行调用,实现方法重载。注意:方法重载与返回值类型没有关系,只与参数有关系,开发原则: 方法重载返回值;类型要相同。System.out.println()明显的方法重载。
方法的递归调用
注意:
- 设置方法的结束条件;
- 每一次调用过程中一定要修改传递参数条件;
例子:1~100的累加
实际开发中,很少使用递归,递归容易出现栈溢出。
例子:计算1!+ 2! + 3! ....