注意:其中资料来源于蓝桥云课(https://www.lanqiao.cn/)、尚硅谷(http://www.atguigu.com/)以及百度(www.baidu.com),有兴趣的小伙伴可以去官网学习,这里是小编自己学习后整理的资料,有误之处欢迎留言讨论,谢谢!
环境搭建
**注:因为蓝桥云课自带环境所以无需搭建,可直接跳过,这是搭建本地主机的环境。**
● 学习用的是 8 版本
下载网址
○ www.oracle.com
○ java.sun.com
○ http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装jdk
注:路径不要包含中文和空格
○ 右击 我的电脑 → 属性 → 高级系统设置 →高级 → 环境变量
○ JAVA_HOME : jdk安装路径
○ CLASSPATH : .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //记得前面有个"."
○ Path : %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
测试
○ 开始 → 运动 → 输入 “cmd”
○ 键入命令: java -version、java、javac 几个命令,出现以下信息,说明环境变量配置成功
软件
推荐eclipse 或者IDEA
简介
Java 中所有的代码都必须包含在 class 中,main 方法是程序的入口,并且 Java 是区分大小写的,如果写成 Main,那么程序将因找不到程序入口而无法运行。使用 public 修饰的 class 名(HelloWorld)须和源代码文件名相同。
编译源代码
输入 javac HelloWorld.java,如果程序没有任何提示,并且在同级目录下生成了一个 .class 扩展名的文件,那么说明编译成功,反之编译失败。
运行程序:输入 java HelloWorld,这个时候不需要再添加扩展名了。
变量
● 程序通过改变变量的值来改变整个程序的状态。为了方便使用变量,所以变量都需要命名,叫做变量名。
● 格式:数据类型 变量名称;
常量
● 常量的值是不能被修改的,Java 中的 final 关键字可以用于声明属性(常量),方法和类。当 final 修饰属性时,代表该属性一旦被分配内存空间就必须初始化,它的含义是“这是无法改变的”或者“终态的”。在变量前面添加关键字 final 即可声明一个常量。在 Java 编码规范中,要求常量名必须大写。
● 格式:final 数据类型 常量名 = 值;
数据类型
字符串(String)
字符串长度
//方法原型
public int length(){
}
字符串比较
public class StringTest {
public static void main(String[] args){
String s = new String("Java");
String m = "java";
System.out.println("用equals()比较,java和Java结果为"+s.equals(m));
System.out.println("用equalsIgnoreCase()比较,java和Java结果为"+s.equalsIgnoreCase(m));
}
}
注意
○ 若想忽略大小写 调用 equalsIgnoreCase() 其他写法一样
○ “==” 是比较两个对象在内存中存储的地址是否一样
变量 b 的值是 false,因为 s1 对象对应的地址是 “abc” 的地址,而 s2 使用 new 关键字申请新的内存,所以内存地址和 s1 的 “abc” 的地址不一样,所以获得的值是 false。
字符串连接
○ 使用 +,比如 String s = "Hello " + “World!”。
○ 使用 String 类的 concat() 方法。
charAt() 方法
作用是按照索引值(规定字符串中第一个字符的索引值是 0,第二个字符的索引值是 1,依次类推),获得字符串中的指定字符。
```java
String s = "abc";
char c = s.charAt(1);
===> 变量 c 的值是 'b'。
常用字符串提取方法
StringBuilder
String 是无法被修改的,对 String 的修改,其实是新建了一个 String 对象。如果需要修改字符串的内容,可以使用 StringBuilder。它相当于一个存储字符的容器。
初始化
构造一个不包含任何字符且初始容量为 16 的 StringBuilder
StringBuilder a = new StringBuilder();
构造一个不包含任何字符且容量为 cap 的 StringBuilder
StringBuilder b = new StringBuilder(int cap);
构造一个 StringBuilder,内容初始化为 str
StringBuilder c = new StringBuilder(String str);
public class StringBuilderTest {
public static void main(String[] args){
StringBuilder s1 = new StringBuilder();
s1.append("java");
StringBuilder s2 = new StringBuilder(5);
StringBuilder s3 = new StringBuilder("shiyanlou");
System.out.println("s1:" + s1.toString() + "\tcap:" + s1.capacity());
System.out.println("s2:" + s2.toString() + "\tcap:" + s2.capacity());
System.out.println("s3:" + s3.toString() + "\tcap:" + s3.capacity());
}
}
==>
$ javac StringBuilderTest.java
$ java StringBuilderTest
s1:java cap:16
s2: cap:5
s3:shiyanlou cap:25
其中 s3 的 capacity 为 25 是因为初始容量 16 + shiyanlou 的长度 9。
常用方法
算术运算符
![这里插入图片描述](https://img-blog.csdnimg.cn/b574fbdf02184438a2bf53c7f3526d79.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pWyIOmSnyDkuro=,size_19,color_FFFFFF,t_70,g_se,x_16)
● 前缀自增自减法 (++i,–i): 先进行自增或者自减运算,再进行表达式运算。
● 后缀自增自减法 (i++,i–): 先进行表达式运算,再进行自增或者自减运算
位运算符
遗留问题点:按位右移和按位右移补零的区别?
逻辑运算符
&& 与 || 是具有短路性质,当按优先级顺序计算到当前表达式时,表达式的结果可以确定整个表达式的结果时,便不会继续向后进行判断和计算,而直接返回结果。
关系运算符
● 三目运算符
○ 布尔表达式 ?表达式 1 : 表达式 2;
○ 运算过程:如果布尔表达式的值为 true,则返回表达式 1的值,否则返回表达式 2的值。
● == 和 != 适用于所有的基本数据类型,其他关系运算符不适用于 boolean,因为 boolean 值只有 true 和 false,比较没有任何意义。
● == 和 != 也适用于所有对象,可以比较对象的引用是否相同。
运算符优先级
关键字
方法
定义
访问修饰符:
代表方法允许被访问的权限范围, 可以是 public、protected、private 或者省略(default) ,其中 public 表示该方法可以被其他任何代码调用。
返回值类型
方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void (代表无类型);如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值。
方法名
是方法的名字,必须使用合法的标识符。
参数列表
传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开。当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
方法体
方法体包含具体的语句,定义该方法的功能。
根据方法是否带参、是否带返回值,可将方法分为四类:
● 无参无返回值方法
● 无参带返回值方法
● 带参无返回值方法
● 带参带返回值方法
IF 语句
语法一
语法二
语法三
if嵌套
switch语句
语法
当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。
● defualt 块不是必须的,默认为空。
while 和 do-while 语句
while语法:
- 判断 while 后面的条件是否成立 ( true or false )
- 当条件成立时,执行循环内的代码。
do-while 语法
- 先执行一遍循环操作,然后判断循环条件是否成立。
- 如果条件成立,继续执行1、2,直到循环条件不成立为止
for 语句
语法
for 相比 while 和 do-while 语句结构更加简洁易读,它的执行顺序:
- 执行循环变量初始化部分(1),设置循环的初始状态,此部分在整个循环中只执行一次。
- 进行循环条件的判断(2),如果条件为 true,则执行循环体内代码(4);如果为 false ,则直接退出循环。
- 执行循环变量值操作部分(3),对循环变量的值进行修改,然后进行下一次循环条件判断(2)。
习题 字符串处理
● 从控制台输入一行字符串
● 去除字符串中的所有空格
● 打印去除空格后的字符串
import java.util.Scanner;
public class StringUtil {
public static void main(String[] args) {
Scanner in =new Scanner(System.in);
//获取String值
String a=in.nextLine();
StringBuilder stringBuilder = new StringBuilder(a);
for (int i = 0; i < stringBuilder.length(); i++) {
if (stringBuilder.charAt(i)==' ') {
stringBuilder.deleteCharAt(i);
i--;
}
}
System.out.println(stringBuilder.toString());
}
}
习题 对比字符串
● 从控制台输入字符串 a 和字符串 b
● 比较字符串 a 和字符 b 是否完全一致,长度,内容等完全一致。
● 如果完全一致,输出相同,如果不一致,输出不同。
● 禁止使用equals方法
import java.util.Scanner;
public class ContrastString{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String a = in.nextLine();
String b = in.nextLine();
boolean flag=true;
if(a.length()!=b.length())
flag=false;
else{
for(int i=0;i<a.length();i++){
if(a.charAt(i)!=b.charAt(i)){
flag=false;
break;
}
}
}
if(flag)
System.out.println("相同");
else
System.out.println("不相同");
}
}
跳转语句
● break 关键字经常用在条件和循环语句中,用来跳出循环语句。
习题 打印星期
● 从控制台获取一个整型参数
● 当输入数字 1 时输出今天是星期一
● 当输入数字 2 时输出今天是星期二
import java.util.Scanner;
public class PrintWeek{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int a=in.nextInt();
System.out.print("今天是星期");
switch(a){
case 1:
System.out.println("一");
break;
case 2:
System.out.println("二");
break;
case 3:
System.out.println("三");
break;
case 4:
System.out.println("四");
break;
case 5:
System.out.println("五");
break;
case 6:
System.out.println("六");
break;
case 7:
System.out.println("日");
break;
}
}
}
数组
有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合。
下标从 0 开始,到数组长度 -1 结束。
语法
语法二
注意点
- 数组下标从 0 开始。所以数组的下标范围是 0 至 数组长度 -1。
- 数组不能越界访问,否则会报错。
for语法强化
public class JudgePrime{
public static void main(String[] args){
int[] ages={12,18,9,33,45,60};
int i=1;
for(int age:ages){
System.out.println("数组中第"+i+"个元素是"+age);
i++;
}
}
}
二维数组
语法
习题 数组应用
有一份成绩单,上面有 10 位学生的成绩(61,57,95,85,75,65,44,66,90,32),请求出平均成绩并输出。
public class AverageScore{
public static void main(String[] args){
int[] score={61,57,95,85,75,65,44,66,90,32};
double avg=0;
int sum=0;
for(int i=0;i<10;i++)
sum+=score[i];
avg=sum/10;
System.out.println(avg);
}
}
知识点
● 输入
○ 导包 import java.util.Scanner;
○ 定义 Scanner in= new Scanner(System.in);
○ 输入
■ 字符串 in.nextLine();
■ 整形 in.nextInt();
■ …
○ 关闭输入
■ in.close();