一、环境搭建
之前发过一篇文章,有关Java环境搭建的,大家可以点点链接Java开发环境搭建。
接下来,补充个语法点:
- 注释
单行注释:// 注释
多行注释:/* 注释 */
文档注释:/** 注释 */
- 语法规则
Java是一种纯面向对象的语言,任何代码语句必须包含在class中;
严格区分大小写;
是一种自由格式的语言;
代码分为结构定义语句和功能执行语句;
功能执行语句最后必须以分号结束;
二、基础语法
1、变量与基本数据类型
1.1 变量
变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。由于该存储单元中的数据可以发生改变,因此得名为"变量"。
变量分类
按所属的数据类型划分:
- 基本数据类型变量
- 引用数据类型变量 (比如字符串、数组、接口)
按被声明的位置划分:
- 局部变量:方法或语句块内部定义的变量
- 成员变量:方法外部、类的内部定义的变量
特别注意:类的外面不能有变量的声明
1.2 数据类型
由于变量记录的数据内容大小不同, 导致所需的存储单元大小不同,在 Java 语言中使用数据类型的概念加以描述 .
(C/C++、Java都属于强类型语言,声明变量时必须指定变量类型。相对应的,python属于弱类型语言)
字节是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。Java 中的字节是八位的字节(1 byte = 8 bit ),即它包含八位的二进制数。
1.3 标识符
Java 对包、类、方法、参数和变量等要素命名时使用的字符序列称为标识符。
规则如下:
- 由字母、数字、下划线(_)、美元符号($)和人民币组成。(甚至可以使用中文作为部分变量,但不建议这样做)
- 不能以数字开头。
- 区分大小。
- 长度无限制。
- 不能是 Java 中的保留关键字。
标识符命名习惯:见名知意。
示例:合法标识符:HelloWord、username2、user_name、_userName、$abc_123
非法标识符:2UserName、user#Name、Hello World、class
1.4 数据类型的转换
boolean 类型不能转换成任何其它数据类型。
自动类型转换:
- 容量小的类型自动转换成容量大的数据类型 byte,short,int -> float ->long ->double
- byte,short,int 不会互相转换,它们三者在计算时会转换成 int 类型
强制类型转换:
- 容量大的类型转换成容量小的数据类型时,要加上强制转换符
- long l = 100L;
- int i = (int)l;
- 有可能造成精度降低或数据溢出,使用时要小心
1.5 部分变量的使用
我们有时在申明变量给它选类型时,编译器总会提示错误,如下情况所述:
float num1 = 10.1;// 浮点数默认为double类型,由于左边float,右边double,所以提示需要强制类型转换。解决方法:在浮点数后加字符 f,即 float num1 = 10.1f;
long num2 = 2200000000;// 整型默认为int,最大值为21亿多,long型变量虽然足够容纳,但由于左边为long,右边为int,所以还是会提示超出范围。解决方法:在整型后加字符l,即long num2 = 2200000000l;
2、方法
2.1 概述
方法用于封装一段特定的逻辑功能。方法的主要要素有:权限修饰符、方法名、参数列表和返回值。
2.2 格式
其实,这个格式很灵活的,具体题目具体分析。
2.3 权限修饰符详解
2.4 返回值
方法调用结束后可以返回一个数据,称之为返回值。
方法在声明时必须指定返回值的类型。
通过 return 语句返回,return 语句的作用在于结束方法且将数据返回。
如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为 void。
2.5 参数列表详解
方法的参数列表:在调用时传递给方法,需要被方法处理的数据。
在方法定义时,需要声明该方法所需要的参数变量。
在方法调用时,会将实际参数值传递给方法的参数变量。
必须保证传递参数的类型和个数符合方法的声明。
2.6 方法实例
接下来我们用代码理解下上面的概念
a、调用无参的参数
public static void main(String[] args) {
say();
}
public static void say() {
System.out.println("我");
System.out.println("是");
System.out.println("Victor");
}
运行结果:
b、调用有参的参数
public static void main(String[] args) {
System.out.println(sum(20,20));
}
public static int sum(int x, int y) {
return x + y;
}
运行结果:
3,运算符
3.1 算术运算符
算术运算符基本跟我们之前小学学习的加减乘除都一样的,现在就只讲解下自增自减运算符:
++:
如果是变量前缀(a++):先对此变量加 1,再执行其他的操作。
如果是变量后缀(++a):先执行当前语句的其他操作,再对此变量加 1。
- -:
如果是变量前缀(a- -):先对此变量减 1,再执行其他的操作。
如果是变量后缀(- -a):先执行当前语句的其他操作,再对此变量减 1。
小结: 前自增或减 都是先操作再赋值; 后自增或减 都是先赋值再操作。
3.2 赋值运算符
赋值运算符作用是将一个值赋给一个变量,运算顺序从右到左;
3.3 关系运算符
关系运算符作用是比较两边的操作数,结果总是 boolean 型的。
3.4 逻辑运算符
逻辑运算符用于对 boolean 型结果的表达式进行运算,运算结果总是 boolean 型,后面结合条件结构讲解。
注意啦: 短路(&& ||)与 逻辑(& |) 的区别
反正不管是哪个,与:一假为假 ; 或:一真为真
- &&(短路与):如果左边为false则右边不执行,整个表达式为false,否则左边true则要执行右边;
- &(逻辑与):不管左边false还是true,都需要执行右边。
- ||(短路或):如果左边为true则右边不执行,整个表达式为true,否则左边false则要执行右边;
- |(逻辑或):不管左边false还是true,都需要执行右边。
3.5 字符串连接运算符
eg:String s=“He” + “llo”; 结果:“Hello”。
String s=“x” + 123; 结果:x123。
如上可以得出结论:"+"除了可用于字符串相连接,也能将字符串与其它的数据类型相连成一个新的字符串。
(“+”两边任意一边为字符串,结果就为字符串)
3.6 三目运算符
x? y : z
x 为 boolean 类型表达式,先计算 x 的值,若为 true,整个三目运算的结果为表达式 y 的值,否则整个运算结果为表达式 z 的值。
eg:int score = 75;
String type = score >=60 ? “及格” : “不及格”; 结果:及格
4、命名规范
- 类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
- 方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
- 变量名规范:全部小写。
5、转义字符
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加""来表示常见的那些不能 显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII码字符意思了。
三、流程控制
有三种基本结构:顺序结构、分支结构 和 循环结构
1、接收用户输入
首先,创建Scanner工具类对应的实体对象input,用于操作输入,需要注意以下两点:
更具体的输入,需要使用上一步创建的实体input带有的函数,比如:
- input.nextInt(); // 返回值为int
- input.nextFloat(); // 返回值为float
- input.nextByte(); // 返回值为byte
- …
然而上述函数要求输入必须与预定类型一致。为了方便接受各种不同类型的输入,可以使用函数:
- input.next(); // 返回值为String
- input.nextLine(); // 返回值为String
注意:
next与nextLine尽量不要同时使用,why? <------点我点我
2、分支执行结构
2.1 if条件语句
if 条件结构是根据条件判断之后再做处理
if(条件语句){…}
if (条件语句){…}else{…}
if (条件语句){…}else if(条件语句){…}
if(条件语句){…}else if(条件语句){…}else{…}
例子:用户输入学生成绩,判断成绩是否及格,判断条件为 优良: > 90、良好:81-90、中:60-80、不及格:<60
import java.util.Scanner;
public class Demo4{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = input.nextInt(); // 91 优 81-90 良 60-80 中 60 差
if(score >= 91){
System.out.println("您的成绩是优秀!继续加油哦!");
}else if(score >= 81 & score < 91){
System.out.println("您的成绩是良好!还要努力哦!");
}else if(score >= 60 & score <= 80){
System.out.println("您的成绩是中等!还要加倍努力哦!");
}else{
System.out.println("您的成绩是差!准备补考费吧!");
}
}
}
运行结果:
2.2 switch语句
switch(表达式){
case 取值 1: 语句块 1;break;
case 取值 n: 语句块 n;break;
default: 语句块 n+1;break;
}
switch 语句有关规则 :
- 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String;
- case子句中的取值必须是常量,且所有 case 子句中的取值应是不同的;
- default 子句是可选的;
- break 语句用来在执行完一个case 分支后使程序跳出 switch 语句块;
- 如果 case 后面没有写 break 则直接往下面执行!
- case 后面的执行体可写{ }也可以不写{ }
例题:多分支月份输出天数(充分利用语句特性)
import java.util.Scanner;
public class Demo6{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入月份:");
int month = input.nextInt();
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month + "月共有 31 天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month + "月共有 30 天");
break;
case 2:
System.out.println(month + "月共有 28 天");
break;
default :
System.out.println("友情提示,您输入有误!");
break;
}
}
}
运行结果:
3、循环执行结构
循环语句功能
- 在循环条件满足的情况下,反复执行特定代码
循环语句分类
- for 循环
- while 循环
- do/while 循环
3.1 while循环
合条件,循环继续执行;否则,循环退出
特点:先判断,再执行
while(条件表达式){
//语句块;
}
3.2 do-while 循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出 (保证函数体内的代码至少执行一次)
特点:先执行,再判断
do {
循环操作
}while ( 条件表达式 );
3.3 for循环
for(初始化参数;判断条件 ;更新循环变量){
循环体;
}
3.4 break、continue与多重循环的跳出
之前写过一篇关于如何退出多重循环,里边也写了break、continue的区别。
四、数组
1、基础内容
数组这一板块的基础内容都在不久前发过一篇数组的文章,里面主要讲了数组的概念、创建格式以及常见问题。
但需补充一点:数组是引用数据类型,系统会自动给它默认初始值。
数组的初始值:
- byte、short、int、long:0;
- float、double:0.0;
- boolean:false;
- char:一个空格;
- String:null。
2、数组应用
2.1 寻找数组最值
创建变量,存储最值,遍历数组更新最值;
建议:将变量初始化为数组的第一个元素;
public static void main(String[] args) {
int[] nums = {
10,30,40,50,0,70,25};
//1.创建一个变量,用于存储遍历数组时最大值。
int n = nums[0];
//2.循环取出数组中的每一个内容,从下标1开始
for(int i = 1; i < nums.length; i ++) {
//将数组中的每一个内容与n比较,如果比n大,则将n的值赋值给这个内容
//方法一
n = n > nums[i] ? n : nums[i];
//方法二
/*if(n < nums[i]) {
n = nums[i];
}*/
}
System.out.println("最大值为:" + n);
}
运行结果:
2.2 常用算法
2.2.1 冒泡排序
请点击这里查看冒泡排序的算法。
2.2.2 二分查找
请点击这里查看二分查找的算法。