文章目录
- Java基础(1)
- 1.注释
- 2.字面量
- 3.关键字
- 4.标识符
- 5.数据类型转换
- 5.1自动类型转换
- 5.2表达式的自动类型转换
- 5.3强制类型转换
- 6.运算符
- 7.接收用户输入
- 8.分支结构
- 8.1 if分支
- 8.2 switch分支
- 9.循环结构
- 9.1 for语句
- 9.2 while循环
- 10.生成随机数
- 11.数组
- 11.1 静态初始化
- 11.2 动态初始化
- 12. 方法(函数)
- 12.1 参数传递
- 12.2 方法重载
- 13. 包
- 14. 字符串类
- 14.1 创建方式
- 14.2 常用方法
- 15. ArrayList类
- 15.1 常见方法
Java基础(1)
-
Java的创始人:
- 詹姆斯●高斯林,被称为Java之父
-
Java能做的事情非常多,它可以做桌面应用的开发、企业互联网应用开发、移动应用开发、服务器系统开发、大数据开发、游戏开发等等。
-
Java是哪家公司的产品?
-
Java以前是Sun公司的产品,现在Java是属于Oracle公司的产品
-
-
Java技术平台有哪些?
-
JavaSE(标准版)、JavaEE(企业版)、JavaME(小型版)
-
-
什么是JVM?
JDK最核心的组成部分是JVM(Java Virtual Machine),它是Java虚拟机,真正运行Java程序的地方。
-
什么是核心类库?
它是Java本身写好的一些程序,给程序员调用的。 Java程序员并不是凭空开始写代码,是要基于核心类库提供的一些基础代码,进行编程。
-
什么是JRE?
JRE(Java Runtime Enviroment),意思是Java的运行环境;它是由JVM和核心类库组成的;如果你不是开发人员,只需要在电脑上安装JRE就可以运行Java程序。
-
什么是开发工具呢?
Java程序员写好源代码之后,需要编译成字节码,这里会提供一个编译工具叫做javac.exe,编写好源代码之后,想要把class文件加载到内存中运行,这里需要用到运行工具java.exe。
除了编译工具和运行工具,还有一些其他的反编译工具、文档工具等待… -
JDK的组成
1.注释
-
单行注释
//后面跟解释文字
-
多行注释
/*
这里写注释文字
可以写多行
*/ -
文档注释
/**
这里写文档注释
也可以写多行,文档注释可以利用JDK的工具生成帮助文档
*/ -
Ctrl + /
单行注释(对当前行进行注释)
Ctrl + Shift + /
对选中的代码进行多行注释。
2.字面量
- 字面量其实就是告诉程序员数据在程序中的书写格式
3.关键字
- 关键字是java语言中有特殊含义的单词
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
-
关键字的特点:
1.关键字都是小写的
2.关键字在idea中有特殊颜色标记(如果你没有修改关键字的颜色,默认是蓝色的)
4.标识符
-
所谓标志符其实就是我们自己取的名字。像前面我们取的类名,变量名其实都是标志符
-
强制要求:必须遵守,不遵守就会报错
1.最好是字母、数字、下划线、$组成
2.不能以数字开头
3.不能是Java的关键字 -
建议遵守:按照下面的方式取名字会显得更加专业
1.所有的名字要见名知意,便于自己和别人阅读
举例: class Student{} //一看这个类就知道表示一个学生
int age =10; //一看这个变量就知道表示年龄
2.类名:首字母大写(大驼峰命名)
举例: class Student{}3.变量名:第二个单词开始首字母大写(小驼峰命名)
举例: double money = 6.88;
double applePrice = 7.5;
5.数据类型转换
5.1自动类型转换
- 数据范围小的变量可以直接赋值给数据范围大的变量
byte a = 12;
int b = a; //这里就发生了自动类型转换(把byte类型转换int类型)
- 本质:自动类型转换其本质就是在较小数据类型数据前面,补了若干个字节
java">public class TypeConversionDemo1 {public static void main(String[] args) {// 目标:理解自动类型转换机制。byte a = 12;int b = a; // 发生了自动类型转换了System.out.println(a);System.out.println(b);int c = 100; // 4double d = c;// 8 发生了自动类型转换了System.out.println(d);char ch = 'a'; // 'a' 97 => 00000000 01100001int i = ch; // 发生了自动类型转换了 => 00000000 00000000 00000000 01100001System.out.println(i);}
}
5.2表达式的自动类型转换
如果同一个表达式中,出现不同类型的变量或者数据一起运算,这种情况下:
1.多种数据类型参与运算,其结果以大的数据类型为准
2.byte,short,char 三种类型数据在和其他类型数据运算时,都会转换为int类型再运算
java">public class TypeConversionDemo2 {public static void main(String[] args) {// 目标:掌握表达式的自动类型转换机制。byte a = 10;int b = 20;long c = 30;long rs = a + b + c;System.out.println(rs);double rs2 = a + b + 1.0;System.out.println(rs2);byte i = 10;short j = 30;int rs3 = i + j;System.out.println(rs3);// 面试笔试题: 即使两个byte运算,结果也会提升为intbyte b1 = 110;byte b2 = 80;int b3 = b1 + b2;System.out.println(b3);}
}
5.3强制类型转换
- 强行将范围大的数据,赋值给范围小的变量也是可以的,这里就需要用到强制类型转换。
目标数据类型 变量名 = (目标数据类型)被转换的数据;
java">public class TypeConversionDemo3 {public static void main(String[] args) {// 目标:掌握强制类型转换。int a = 20;byte b = (byte) a; // ALT + ENTER 强制类型转换。System.out.println(a);System.out.println(b);int i = 1500;byte j = (byte) i;System.out.println(j);double d = 99.5;int m = (int) d; // 强制类型转换System.out.println(m); // 丢掉小数部分,保留整数部分}
}
- 本质:强制类型转换的原理,其实就是强行把前面几个字节砍掉,但是有数据丢失的风险
6.运算符
-
与c语言极度类似,但需注意以下:
-
问题1:下面的代码否有问题?
byte x = 10;
byte y = 30;
x = x + y; //这句代码有问题,因为两个byte类型数据相加,会提升为int类型;问题2:下面的代码是否有问题?
byte x = 10;
byte y = 30;
x+=3; //这句代码没有问题,因为这里有隐含的强制类型转换
//x+=3; 等价于 byte x = (byte)(x+y);
7.接收用户输入
- 键盘录入这个事情,其实并不是我们自己做的,而是Java本身就提供了这样的功能,我们按照它的要求,去调用就行。
比如:Scanner就是Java提供给我们用于键盘录入数据的类,为了录入不同类型的数据,还提供了不同的功能,每一个功能会有不同的名称,我们只需要调用Scanner提供的功能就可以完成键盘录入数据。
-
示例:
-
java">【第1步】:在class类上导包:一般不需要我们自己做,idea工具会自动帮助我们 导包的。import java.util.Scanner;【第2步】:得到一个用于键盘扫描器对象(照抄代码就行,固定格式)//Scanner是键盘扫描器对象(你就把它理解成一个东西),这个东西有录入的功能//sc是给这个东西取的名字Scanner sc = new Scanner(System.in);【第3步】:开始调用sc的功能,来接收用户键盘输入的数据。//sc这个东西有键盘录入整数的功能,这个功能的名字叫nextInt()//.表示表示调用的意思int age = sc.nextInt();System.out.println("我的年龄是:"+age);//sc这个东西还有键盘录入字符串的功能,这个功能的名字叫nextString name = sc.next();System.out.println("我的姓名是:"+name);
8.分支结构
-
与c语言一样
-
如果是对一个范围进行判断,建议使用if分支结构
-
如果是与一个一个的值比较的时候,建议使用switch分支结构
8.1 if分支
8.2 switch分支
-
1.表达式类型只能是byte、short、int、char
JDK5开始支持枚举,JDK7开始支持String
不支持double、float、double
-
2.case给出的值不允许重复,且只能是
字面量
,不能是变量
。 -
3.正常使用switch的时候,不要忘记写break,否则会出现
穿透现象
。
9.循环结构
-
与c语言一模一样
-
-
从功能来说:能够用for循环做的,都能用while循环做。
-
使用规范上来说:知道循环几次,建议使用for;不知道循环几次建议使用while
-
9.1 for语句
9.2 while循环
10.生成随机数
生成随机数的功能,其实 Java已经给我们提供了,在JDK中提供了一个类叫做Random,我们只需要调用Random这个类提供的功能就可以了。
java">// 目标:掌握使用Random生成随机数的步骤。
// 1、导包。import java.util.Random; (idea会自动完成)
import java.util.Random;
public class RandomDemo1 {public static void main(String[] args) {// 2、创建一个Random对象,用于生成随机数。Random r = new Random();// 3、调用Random提供的功能:nextInt得到随机数。for (int i = 1; i <= 20; i++) {int data = r.nextInt(10); // 0 - 9System.out.println(data);}}
}
11.数组
定义数组时,
数据类型[] 数组名
也可写成数据类型 数组名[]
其和c语言一样。
-
数组就是一个容器,用来存一批
同种类型
的数据的。遇到批量数据的存储和操作时,数组比变量更适合 -
int[] array = {20,10,80,60,90};
String[] names = {“牛二”, “西门”, “全蛋”};
11.1 静态初始化
-
在定义数组时直接给数组中的数据赋值
-
格式:
-
数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3};
-
//定义数组,用来存储多个年龄
int[] ages = new int[]{12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
-
-
简化写法:
-
数据类型[] 变量名 = {元素1,元素2,元素3};
-
//定义数组,用来存储多个年龄
int[] ages = {12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = {89.9, 99.5, 59.5, 88.0};
-
//以下两种写法是等价的。但是建议大家用第一种,因为这种写法更加普遍
int[] ages = {12, 24, 36};
int ages[] = {12, 24, 36}
11.2 动态初始化
-
动态初始化不需要我们写出具体的元素,而是
指定元素类型和长度
就行。数组中的元素默认值是0
。 -
格式:
-
//数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
-
-
使用动态初始化定义数组时,根据元素类型不同,默认值也有所不同。
12. 方法(函数)
-
方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用
作用:
- 提高了代码的复用性,提高了开发效率。
- 让程序的逻辑更清晰。
- 注意:
- 方法在内种没有先后顺序,但是不能把一个方法定义在另一个方法中。
- 方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据,
如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。
- return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。
- 方法不调用就不会执行, 调用方法时,传给方法的数据,必须严格匹配方法的参数情况。
- 调用有返回值的方法,有3种方式:
① 可以定义变量接收结果
② 或者直接输出调用,
③ 甚至直接调用;
- 调用无返回值的方法,只有1种方式: 只能直接调用。
12.1 参数传递
- 基本类型和引用类型的参数在传递的时候有什么不同?
- 都是
值传递
- 基本类型的参数传递存储的
数据值
。 - 引用类型的参数传递存储的
地址值
。
- 都是
12.2 方法重载
一个类中,出现多个相同的方法名,但是它们的形参列表是不同的,那么这些方法就称为方法重载了
注意:
方法重载需要注意什么?
- 一个类中,只要一些方法的名称相同
、形参列表不同
,那么它们就是方法重载了,
其它的都不管(如:修饰符,返回值类型是否一样都无所谓)。
形参列表不同
指的是:形参的个数
、类型
、顺序
不同,不关心形参的名称。
13. 包
-
Java官方提供的类有很多,为了对这些类进行分门别类的管理,别人把写好的类都是放在不同的包里的。
包其实类似于文件夹,一个包中可以放多个类文件
建包的语法格式:
java">//类文件的第一行定义包
package com.itheima.javabean;public class 类名{}
-
在自己的程序中,调用其他包中的程序,需要注意下面一个问题
-
如果当前程序中,要调用自己
所在包
下的其他程序,可以直接调用
。(同一个包下的类,互相可以直接调用) -
如果当前程序中,要调用
其他包
下的程序,则必须在当前程序中导包,
才可以访问!导包格式:
import 包名.类名
-
如果当前程序中,要调用
Java.lang
包下的程序,不需要
我们导包的,可以直接
使用。 -
如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。
-
14. 字符串类
- String类的API中,有这么一句话:“Java程序中的所有字符串字面值(如"abc")都是字符串的实例实现”。这里所说的实例实现,其实指的就是字符串对象。
14.1 创建方式
-
所有Java的字符串字面值,都是字符串对象。
-
- String是什么,可以做什么?
答:String代表字符串,可以用来创建对象封装字符串数据,并对其进行处理。
2.String类创建对象封装字符串数据的方式有几种?
方式一: 直接使用双引号“…” 。
方式二:new String类,调用构造器初始化字符串对象。 - String是什么,可以做什么?
-
-
string对象的创建方式:
String s1 = "abc";
//这里"abc"就是一个字符串对象,用s1变量接收
-
创建对象示例:
-
java">// 1、直接双引号得到字符串对象,封装字符串数据 String name = "黑马666"; System.out.println(name);// 2、new String创建字符串对象,并调用构造器初始化字符串 String rs1 = new String(); System.out.println(rs1); // ""String rs2 = new String("itheima"); System.out.println(rs2);char[] chars = {'a', '黑', '马'}; String rs3 = new String(chars); System.out.println(rs3);byte[] bytes = {97, 98, 99}; String rs4 = new String(bytes); System.out.println(rs4);
-
14.2 常用方法
可以获取字符串长度
可以根据索引取字符
可以将字符串转换为字符数组
可以与另外的字符串进行比较(也可以忽略大小写)
可以根据索引截取子串
可以判断是否包含某个子串
可以判断是否以某字串开头
可以按照某个字符串内容分割,返回字符串数组。
可以将某个字串替换,并返回替换后的字符串
示例:
java">public class StringDemo2 {public static void main(String[] args) {//目标:快速熟悉String提供的处理字符串的常用方法。String s = "黑马Java";// 1、获取字符串的长度System.out.println(s.length());// 2、提取字符串中某个索引位置处的字符char c = s.charAt(1);System.out.println(c);// 字符串的遍历for (int i = 0; i < s.length(); i++) {// i = 0 1 2 3 4 5char ch = s.charAt(i);System.out.println(ch);}System.out.println("-------------------");// 3、把字符串转换成字符数组,再进行遍历char[] chars = s.toCharArray();for (int i = 0; i < chars.length; i++) {System.out.println(chars[i]);}// 4、判断字符串内容,内容一样就返回trueString s1 = new String("黑马");String s2 = new String("黑马");System.out.println(s1 == s2); // falseSystem.out.println(s1.equals(s2)); // true// 5、忽略大小写比较字符串内容String c1 = "34AeFG";String c2 = "34aEfg";System.out.println(c1.equals(c2)); // falseSystem.out.println(c1.equalsIgnoreCase(c2)); // true// 6、截取字符串内容 (包前不包后的)String s3 = "Java是最好的编程语言之一";String rs = s3.substring(0, 8);System.out.println(rs);// 7、从当前索引位置一直截取到字符串的末尾String rs2 = s3.substring(5);System.out.println(rs2);// 8、把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们String info = "这个电影简直是个垃圾,垃圾电影!!";String rs3 = info.replace("垃圾", "**");System.out.println(rs3);// 9、判断字符串中是否包含某个关键字String info2 = "Java是最好的编程语言之一,我爱Java,Java不爱我!";System.out.println(info2.contains("Java"));System.out.println(info2.contains("java"));System.out.println(info2.contains("Java2"));// 10、判断字符串是否以某个字符串开头。String rs4 = "张三丰";System.out.println(rs4.startsWith("张"));System.out.println(rs4.startsWith("张三"));System.out.println(rs4.startsWith("张三2"));// 11、把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回给我们String rs5 = "张无忌,周芷若,殷素素,赵敏";String[] names = rs5.split(",");for (int i = 0; i < names.length; i++) {System.out.println(names[i]);}}
}
-
注意事项!
-
- String是不可变字符串对象,每次试图改变字符串对象实际上是新产生了新的字符串对象了,变量每次都是指向了新的字符串对象,之前字符串对象的内容确实是没有改变的,因此说String的对象是不可变的。
- 只要是以“…”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份;
- 但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。
-
15. ArrayList类
-
ArrayList表示一种集合,它是一个容器,用来装数据的,类似于数组。
类似于c++语言的vector
可以直接末尾加元素
可以在某索引处插入元素
可以根据索引取元素
可以获取元素个数
可以根据索引删除某元素
可以删除指定的元素
可以根据索引修改元素
15.1 常见方法
示例:
java">/**
目标:要求同学们掌握如何创建ArrayList集合的对象,并熟悉ArrayList提供的常用方法。*/
public class ArrayListDemo1 {public static void main(String[] args) {// 1、创建一个ArrayList的集合对象// ArrayList<String> list = new ArrayList<String>();// 从jdk 1.7开始才支持的ArrayList<String> list = new ArrayList<>();list.add("黑马");list.add("黑马");list.add("Java");System.out.println(list);// 2、往集合中的某个索引位置处添加一个数据list.add(1, "MySQL");System.out.println(list);// 3、根据索引获取集合中某个索引位置处的值String rs = list.get(1);System.out.println(rs);// 4、获取集合的大小(返回集合中存储的元素个数)System.out.println(list.size());// 5、根据索引删除集合中的某个元素值,会返回被删除的元素值给我们System.out.println(list.remove(1));System.out.println(list);// 6、直接删除某个元素值,删除成功会返回true,反之System.out.println(list.remove("Java"));System.out.println(list);list.add(1, "html");System.out.println(list);// 默认删除的是第一次出现的这个黑马的数据的System.out.println(list.remove("黑马"));System.out.println(list);// 7、修改某个索引位置处的数据,修改后会返回原来的值给我们System.out.println(list.set(1, "黑马程序员"));System.out.println(list);}
}