一、Java入门
1.使用Java输出hello world
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
2.Java程序执行的原理
graph LR
id0(.java)--Javac编译器-->id1(.class)--Java执行工具-->id2(机器指令)
3.JDK和JRE
- JVA(Java Virtual Machine):Java虚拟机,真正运行Java程序的地方
- JDK(Java Development Kit):Java开发工具,包含Java的编译器、虚拟机等Java开发、运行需要的工具
- JRE(Java Runtime Environment):Java运行环境,包含Java虚拟机等Java运行需要的工具
4.配置环境变量
- JAVA_HOME:告诉操作系统JDK的安装位置
- Path:路径为JDK中的bin文件夹(可以写为%JAVA_HOME%bin,百分号表示取这个变量的路径)
二、注释
1.单行注释
//这是一个单行注释
//Ctrl + / :快速单行注释
2.多行注释
/*
这是
多行
注释
*/
//Ctrl + Shift + / :快速多行注释
3.文档注释
/**
这是文档注释
常用在class上
*/
三、字面量
1.定义
字面量就是数据在程序中书写的格式
2.分类
字面量类型 | 说明 | 示例 |
---|---|---|
整数 | 不带小数的数字 | 100 |
小数 | 带小数的数字 | 3.14 |
字符 | 单个字符,使用单引号 | 'a' |
字符串 | 多个字符,使用双引号 | "abcd" |
布尔值 | 表示真假 | true、false |
空值 | 一个特殊的值,表示空 | null |
package C_03;
public class Literal {
public static void main(String[] args) {
//1.整数
System.out.println(100);
//2.小数
System.out.println(3.14);
//3.字符
System.out.println('a');
//4.字符串
System.out.println("abcd");
//5.布尔值
System.out.println(true);
//6.空值:null
}
}
四、变量
1.定义
变量是内存中的一片区域,用于存储数据
2.格式
数据类型 变量名称 = 初始值;
3.改变变量的值
package C_04;
public class Variable {
public static void main(String[] args) {
double money = 3.14;
System.out.println(money);
//再次赋值
money = 5.14;
System.out.println(money);
//数学运算
money = money + 4.0;
System.out.println(money);
}
}
4.注意事项
- 变量不能存储与其数据类型不符的数据
- 变量的有效范围是其所在的作用域,同一作用域内不能定义同名变量
- 变量在定义时可以不进行初始化,但使用之间需要进行初始化
5.数据类型
- 引用数据类型
- 基本数据类型
- 整数
关键字 内存占用(字节) byte 1 short 2 int 4 long 8 注:Java中的整数字面量默认为int类型,如果希望其为long类型,需要在末尾添加L或l
- 浮点数
关键字 内存占用 float 4 double 8 - 字符
关键字 内存占用 char 2 - 布尔
关键字 内存占用 boolean 1
6.数据类型转换
- 自动类型转换:类型范围小的变量可以直接赋值给类型范围大的变量
- 表达式的自动类型转换:在表达式中,小范围类型的变量会自动转换成大范围类型的变量进行运算,表达式的最终结果的类型是由其中最大范围类型的变量决定的(其中byte,char,short作为int类型参与运算)
- 强制类型转换:强制将大范围类型变量赋值给小范围类型变量,高位会被截断丢弃(浮点型转换为整型会丢弃小数部分)
package C_01; public class TypeConversion { public static void main(String[] args){ //1.自动类型转换 byte a = 20; double b = a; System.out.println(a); System.out.println(b); //2.表达式的自动类型转换 double c = 3.14; System.out.println(a+c); //3.强制类型转换 //语法:变量 = (类型)变量 int d = 500; byte e = (byte)d; System.out.println(d); System.out.println(e); //浮点型->整型 double f = 3.14; int g = (int)f; System.out.println(f); System.out.println(g); } }
五、运算符
1.算术运算符
符号 | 作用 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 整除 |
% | 取余 |
++ | 自增 |
-- | 自减 |
+= | 加后赋值 |
-= | 减后赋值 |
*= | 乘后赋值 |
/= | 整除后赋值 |
%= | 取余后赋值 |
注:+
可以用于字符串的运算,其结果仍为字符串
package C_02;
public class operator_1 {
public static void main(String[] args){
//算术运算符
//1.加法
int a = 7;
int b = 2;
System.out.println(a+b);
//2.减法
System.out.println(a-b);
//3.乘法
System.out.println(a*b);
//4.整除
System.out.println(a/b);
//5.取余
System.out.println(a%b);
//6.自增
System.out.println(++a);
//7.自减
System.out.println(--b);
//8.+=
int c = 0;
c += 1;
System.out.println(c);
//9.-=
int d = 0;
d -= 1;
System.out.println(d);
//10.*=
int e = 5;
e *= 5;
System.out.println(e);
//11./=
int f = 5;
f /= 2;
System.out.println(f);
//12.%=
int g = 5;
g %= 2;
System.out.println(g);
//13.字符串运算
System.out.println("abc"+a);
}
}
2.关系运算符
符号 | 作用(判断) |
---|---|
== | 相等 |
! = | 不等于 |
> | 大于 |
< | 小于 |
> = | 大于等于 |
< = | 小于等于 |
package C_02;
public class operator_2 {
public static void main(String[] args){
//关系运算符
int a = 5, b = 6;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);
}
}
3.逻辑运算符
符号 | 作用 |
---|---|
& | 与 |
| | 或 |
! | 非 |
^ | 异或 |
&& | 短路与(左侧为false则不执行右侧) |
|| | 短路或(左侧为true则不执行右侧) |
package C_02;
public class operator_3 {
public static void main(String[] args){
double size = 12;
double price = 2000;
System.out.println(size > 10 & price <5000);
System.out.println(size > 10 | price <1000);
System.out.println(!(size > 10));
System.out.println(size > 10 ^ price <5000);
System.out.println(size < 10 && price <5000);
System.out.println(size > 10 || price <1000);
}
}
4.三元运算符
- 格式:
条件表达式 ? 值1 : 值2
- 作用:判断条件是否成立,成立返回值1,不成立返回值2
public class DraftPaper { public static void main(String[] args){ int a = 10; int b = 200; System.out.println(a>b ? a : b); } }
六、程序流程控制
1.顺序结构
程序默认使用顺序结构,代码自上而下运行
2.if分支结构
- 格式一:
if(条件){代码}
- 格式二:
if(条件){代码}else{代码}
- 格式三:
if(条件){代码}else if(条件){代码}else{代码}
package C_01;
public class if_branch {
public static void main(String[] args){
//if分支结构
//1.if(条件){代码}
int money = 50;
if(money < 100)
{
System.out.println("余额不足..."+"当前余额:"+money);
}
//2.if(条件){代码}else{代码}
int num = 0;
if(num < 0)
{
System.out.println("这个数是负数");
}
else
{
System.out.println("这个数不是负数");
}
//3.if(条件){代码}else if(条件){代码}else{代码}
int score = 90;
if(score < 60)
{
System.out.println("未及格!");
}
else if(score < 90)
{
System.out.println("良好");
}
else
{
System.out.println("优秀");
}
}
}
3.switch分支结构
- 格式:
switch(表达式){case:值1 break case:值2 break default:}
package C_01;
public class switch_branch {
public static void main(String[] args){
//switch分支结构
String weekday = "周一";
switch(weekday)
{
case "周一":
System.out.println("今天是周一");
break;
case "周二":
System.out.println("今天是周二");
break;
case "周三":
System.out.println("今天是周三");
break;
case "周四":
System.out.println("今天是周四");
break;
case "周五":
System.out.println("今天是周五");
break;
case "周六":
System.out.println("今天是周六");
break;
case "周日":
System.out.println("今天是周日");
break;
default:
System.out.println("???");
}
}
}
- 注意事项
- 表达式的类型只能是byte、short、int、char,JDK5之后支持枚举类型,JDK7之后支持String类型,不支持double、float、long
- case的值不能重复,且只能是字面量
- 不写break会造成穿透,不判断条件继续执行后续case中的代码
4.for循环结构
- 格式:
for(初始化语句;循环条件;迭代语句){循环体}
package C_02;
public class for_loop {
public static void main(String[] args){
//for循环
for(int i=0;i<3;++i)
{
System.out.println("Hello World!");
}
}
}
5.while循环结构
- 格式:
while(循环条件){循环体}
package C_02;
public class while_loop {
public static void main(String[] args){
//while循环
int i=0;
while(i<3)
{
System.out.println("hello world!");
++i;
}
}
}
6.do-while循环结构
- 格式:
do{循环体}while(循环条件)
package C_02;
public class do_while_loop {
public static void main(String[] args){
//do_while循环
int i=0;
do{
System.out.println("hello world!");
++i;
}while(i<3);
}
7.流程控制语句
- break:退出当前结构
- continue:结束本次循环,进入下一次循环
七、数组
1.定义
- 数组是用于存储一批同种类型数据的内存区域
- 静态初始化数组的定义
- 定义:
数据类型[] 数组名=new 数据类型[]{元素1,元素2,...}
- 简化定义:
数据类型[] 数组名={元素1,元素2,...}
//静态初始化数组 //1.数据类型[] 数组名=new 数据类型[]{元素1,元素2,...} int[] num1=new int[]{1,2,3,4,5}; //2.数据类型[] 数组名={元素1,元素2,...} int[] num2={6,7,8,9,10};
- 定义:
- 动态初始化数组的定义
- 定义:
数据类型[] 数组名=new 数据类型[长度]
,数组中会填充默认值
//动态初始化数组 String[] name=new String[10];
- 定义:
2.访问数组
可以通过下标访问数组中的元素数组名[下标]
,可以通过数组名.length
访问数组的长度
int[] num3={1,2,3,4,5};
//取值
System.out.println(num3[2]);
//赋值
num3[2]=100;
System.out.println(num3[2]);
//访问长度
System.out.println(num3.length);
3.注意事项
数据类型[] 数组名
也可以写作数据类型 数组名[]
- 数组不能存储与其数据类型不符的数据
- 数组被定义之后,其数据类型和长度就已经固定
八、方法
1.定义
- 与其他语言中所说的函数相同,封装一定的操作,输入指定类型的数据,执行操作输出指定的结果
修饰符 返回值类型 方法名(形参列表){ 方法体; return 返回值; } //示例 public static int Sum(int a,int b){ int c=a+b; return c; }
2.注意点
- Java中方法编写的顺序无所谓
- 方法内不能进行嵌套定义
3.方法重载
- 方法重载:同一个类中,多个方法名称相同,但形参列表不同
//方法重载 public static void func(){ System.out.println("调用函数,函数参数:空"); } public static void func(int a){ System.out.println("调用函数,函数参数:int"); } public static void func(int a,int b){ System.out.println("调用函数,函数参数:int,int"); }
九、面向对象编程
1.定义类
public class 类名{
//1.成员变量
//2.成员方法
//3.构造器
//4.代码块
//5.内部类
}
注意:在同一文件中,使用public修饰的类只能有一个,且类名要与文件名相同,建议一个文件只定义一个类
2.创建对象
类名 对象名 = new 类名();
3.构造器
//构造器用于初始化类对象,并返回类的地址
修饰符 类名(参数列表){
}
注意:定义有参构造器会导致无参构造器不再默认生成,如果需要使用无参构造器,则需要手动定义
4.this关键字
代表当前对象的地址,用于访问当前对象的成员变量和成员方法
public class my_class{
int num;
public my_class(int num)
{
num = num; //这里修改的是传入的参数
this.num = num; //这里修改的是类的成员
}
}
5.private关键字
类中通过private关键字可以将类中的成员变为私有
public class my_class{
private int _num;//成员为私有,无法从外部访问
//提供方法操作私有成员
public void setNum(int num)
{
_num = num;
}
}
6.JavaBean
- JavaBean:可以理解为实体类,其对象可以在程序中封装数据
- 要求
- 成员变量使用private修饰
- 提供每一个成员变量的set和get函数
- 提供一个无参构造器
public class my_class{ private String _name; private int _age; private int _score; public void setName(String name) { _name = name; } public String getName() { return _name; } public void setName(int age) { _age = age; } public int getName() { return _age; } public void setScore(int score) { _score = score; } public int getScore() { return _score; } public my_class() { } }
十、String类
1.简介
- 位置:java.lang.String
- String类定义的变量用于存储字符串,提供了操作字符串的功能
- String的对象在创建之后不能被更改
2.创建String类对象
- 方式一:直接使用""定义
String 对象名 = "字符串";
- 方式二:使用构造器
构造器 说明 public String() 创建空白字符串对象 public String(String original) 根据传入的字符串内容创建对象 public String(char[] chs) 根据字符数组的内容创建对象 public String(byte[] chs) 根据字节数组的内容创建对象 - 区别
- 使用""定义:存储在字符串常量池中,相同内容只会存储一份
- 使用构造器:存储在堆内存中,每new一次会多存储一个对象
3.String常用API
- 字符串比较API
- 使用
==
进行比较时,相同内容如果一个存储在堆内存,一个存储在字符串常量池,则会导致不相等,因此字符串不适合使用==
判断
//比较字符串内容 字符串对象.equals(字符串); //忽略大小写比较字符串内容 字符串对象.equalsIgnoreCase(字符串);
- 使用
- 其他API
- public int length():获取字符串长度
- public char charAt(int index):获取某个索引位置的字符
- public char[] toCharArray():将字符串转换为字符数组
- public String substring(int beginIndex,int endIndex):截取内容,左闭右开
- public String replace(CharSequence target,CharSequence replacement):用target替换replacement
- public boolean contains(CharSequence s):查找字符串内是否存在s
- public boolean startWith(String prefix):判断字符串是否以prefix开头
- public String[] split(String s):按照s将字符串分割为字符串数组,会删除s
十一、ArrayList集合
1.简介
- 集合与数组类似,是用于存储数据的一个容器,集合的大小不固定,启动后可以动态变化,类型也可以选择不固定
- ArrayList是集合中的一种,它支持索引
2.创建ArrayList类
- public ArrayList<约束类型>():无参构造器
3.ArrayList常用API
- public boolean add(E e):在集合末尾插入元素
- public void add(int index,E e):在指定位置插入元素
- public E get(int index):返回索引处的元素
- public int size():返回集合元素的个数
- public E remove(int index):删除指定索引处的元素,返回被删除的元素
- public boolean remove(Object o):删除指定的元素,返回删除是否成功
- public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
十二、IDEA项目结构
- project(项目、工程)
- module(模块)
- package(包)
- class(类)
附录:Java常用API
0.API简介
- API:Application Programing Interface,应用程序编程接口
- Java API文档:http://www.oracle.com/technetwork/java/javase/downloads/index.html
1.Scanner
import java.util.Scanner
2.Random
import java.util.Random