jre:java runtime environment:Java运行程序环境,
jdk:Java development kit :Java程序开发工具包
jvm虚拟机保证可以跨平台
该视频使用Java11.0.1
jdk安装目录最好别有中文和空格(防止意外问题)
jdk安装目录:
bin:存放jdk各种工具命令(javac,java)
conf存放jdk相关配置文件
include:存放一些平台特定头文件
jmods:jdk各种模块
legal:jdk授权文档
lib;jdk补充iar包
DOS命令:
win+r cmd
1盘符命令:E:
2dir:查看当前路径下内容
3cd切换路径
4cd .. 返回上一级
5cd /路径/路径 进入多级目录
6cd \ 回到盘符目录
7cls 清屏
8exit 退出窗口
006PATH变量配置
011关键字:特定含义的单词,关键字全部小写,关键字有特殊颜色
012常量:程序运行过程中不可以发生改变的量
字符串常量:“helloworld”
整数常量:123
小数常量:3.14
字符常量:‘A’ ‘b’
布尔常量:true, false
空常量:null
013:计算机存储单元:b = bit = 位
byte=B=字节
1B=8bit
1kB=1024B
1MB=1024KB
1GB=1024MB
基本数据类型:
8B:long double
4B:int float
2B:short char
1B:byte boolean
整数默认int
浮点数默认double
015:定义变量,不给值就不能使用
定义long类型: long l = 1000L;//整形默认int,所以加L
定义float变量:float f = 3.14F;//浮点数默认double
016标识符:
标识符定义规则:
1字母数字下划线$组成
2数字不能开头
3关键字不能使用
4区分大小写
标识符命名约定:
1标识符是一个单词,首字母小写,name,firstName
2标识符多个字母组成,第一个单词首字母小写,其他字母首字母大写
注意区分类和标识符:类名首字母大写,Student,GoodStudent
017类型转换:
自动转换:小——》大
强制类型转换:大——》小
格式:目标数据类型 变量名 = (目标数据类型)变量名;
eg: int k = (int)88.88;
018运算符:操作的符号
算数运算符:
除法/得到的是商
取余%得到的余数
整数相除只能得到整数,想要得到小数,必须有浮点数的参与6.0/4
019:字符+
‘A’=65
‘a’ = 97
'0' = 48 字符零
字符串+操作:
字符串的拼接
+出现在字符串时候,是字符串连接符
+出现在字符串就是连接运算符否则就是算数运算
021赋值运算符:=
+= x=x+y; i+=10; i=i+10;
023关系运算符:
==
!= 不相等 则true ,
024逻辑运算符:
、
短路&&一旦出现false,后面不执行
短路||一旦出现true ,后面不执行
026三元运算符(5.2%)
027案例两只老虎
分析两个变量用于保存老虎的体重,单位kg,int weight1 = 180;
int weight2 = 200;
用三元运算符实现老虎体重判断,体重相同返回true ,否则返回false
(wight1 == weight2?)true:false;
028三个和尚
定义三个变量用于保存和尚的身高
int weight1=150;
int weight2=160;
int weight3 = 180;
用三元运算符获取前两个较高身高和尚的身高,并用临时变量存起来
029Scanner数据输入
Scanner使用步骤:1导包,2创建对象,3接收数据
import java.util.Scanner;
Scanner sc = Scanner(System.in);
int i = sc.nextInt();
031流程控制:顺序结构,分支结构,循环结构
031if
032if else
034奇数偶数判断
number%2 == 0
035
if(){XXX
}else if(){XXX
}else{XXX
}
注意事项:正确数据,边界数据,错误数据
037switch
switch(表达式){
case XXX: XXX;break;
case XXX:XXX;break;
default:XXX;break;
}
表达式取值可以是:byte,short,int,char,string
case 根表达式进行比较
default: 表示所有情况都不匹配就执行该内容
038:春夏秋冬实例,case控制的语句体后面没有break;会出现穿透现象,不判断下一个case情况下向下运行一直到遇到break,或者switch结束
039:for
for(初始化语句;条件判断语句;条件控制语句){
循环体语句
}
040(8%):输出数据
控制台输出1-5:for(int i =1; i<=5;i++){}
控制台输出5-1:for(int i=5;i>=1;i--){}
040:求和;1-5的数据和,并把结果在控制台输出
042偶数求和:1-100之间偶数求和,结果在控制台输出
043水仙花数:1水仙花数一共有三位,2个位,10位,100位数字立方和等于原数
个位:number%10
10位:371/10=37, 37%10=3
100位:number/100
任意数字的指定位数值如何求???
先使用整除操作将要求的数字移动到个位,在使用%得到最后1位的值
eg:12345 (万)6789, 123456789/10000%10
044统计:统计水仙花数有多少个并且控制台输出
045while
while(条件判断语句){
循环体语句;
条件控制语句;
}
while循环输出5次helloworld,与fori类比(小初始值,小于条件,++)
046珠穆朗玛峰案例
珠穆朗玛峰8844.43M=8844430MM,一张纸0.1mm,一张纸折叠多少次可以达到珠穆朗玛峰高度???
for适合知道执行次数
while适合执行无确定次数有确定目标
047do…while()
完整格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句)
048三种循环对比
1:dowhile先执行再判断
2:fori ——i仅仅属于for循环,除此循环不能再使用
3死循环:for( ; ; ){}
死循环while(true){ }
死循环do{ }while(true);
049跳转控制语句:
continue:1-5,6-7,1-5,6-7,1-5,6-7,1-5,6-7,
break:55,56,57,58,59,60, 61,62,63,64,65
continue在循环中基于条件控制语句,跳过某次循环体内容执行,继续下一次执行
break循环中,终止循环体内容的执行,结束当前整个循环
051Random:用于产生一个随机数
使用步骤类似于Scanner:导包,创建对象,获取随机数
import java.util.Random
Random r = new Random();
int number = r.nextInt(10);//0-9
052猜数字游戏:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少
1生成随机数,2猜数字这个操作反复进行while,3键盘录入数字值,4比较输入的数字和系统产生的数据,猜中break
054:idea使用
1空项目JavaSE_Code
2新模块idea_test
idea_test下src创建一个包com.itheima
新建class类
055项目包含模块,模块包含包,包包含class
056内容辅助建
psvm main,sout
ctrl+alt+space(内容提示,代码补全)
ctrl+/(直接注释光标所在行,再来一次就取消)
ctrl+shift+/(选中代码多行注释,)
ctrl+alt+L(格式化)
3.31日
058数组:1一次性声明大量用于存储数据的变量
2数据同类型数据
数组定义格式:*数据类型【】变量名
***int[] arr //定义一个int类型数组,数组名是arr
数据类型 变量名【】
int arr [] //定义一个int类型的变量,变量名是arr数组
059数组动态初始化:初始化时候制定数组长度,由系统为数组分配初始值
数据类型[] 变量名 =new 数据类型[数组长度];
int [] arr = new int[3];
060数组元素访问:
数组内部保存数据的访问方式:数组名[索引]//索引是数组中数据编号方式
计算机编号从0-n
索引:从0开始,连续,逐渐增减
int默认值0,float默认值0.0,布尔值默认值false,字符默认空字符,引用数据类型默认值null
061内存分配:
int[] arr = new int[3];//右边初始化三个int的连续数组,然后赋给左边arr,左边含义定义一个int型数组,数组名arr,数组指向新初始化的连续数组
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
064多个数组指向相同的内存
int[] arr = new int[];//动态分配
arr[0] = 100;
arr[1] = 200;
arr[2]=300;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
int[ ] arr2 = arr;
arr2[0] = 111;
arr2[1] = 222;
arr2[2] = 333;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr2);
System.out.println(arr2[0]);
多个数组指向相同堆内存,任一个发生修改,则值修改,
065数组静态初始化:
格式:数据类型[] 变量名 = new 数据类型[] {数据1,数据2,数据3};
eg: int[] arr = new int[]{1,2,3,4,5,6};
eg:数据类型[]变量名={1,2,3};//int [] arr= {1,2,3};
066数组操作:
1索引越界
2空指针异常
067数组1遍历,2获取最大值
int[] arr = {11,22,33,44,55};
for(int i=0; i< 5; i++){
System.out.println(arr[i]);
}
for(int i=0; i<arr.length;i++){
System.out.println(arr[i]);
}
int [] arr={12,45,98,73,60};
int max = arr[0];
for(int i=1;i<arr.length;i++)
{ if(arr[i] >max){
max=arr[i];
}
}
069方法概述
方法method:将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
方法特点:1必须先创建才可以使用,该过程称为方法定义
2方法创建后并不可以直接运行,需要手动使用后才能执行,该过程成为方法的调用。
070方法的定义和调用:
public static void 方法名(){
方法体
}
方法调用格式:方法名();
、
072方法:
public static void getMax(){
}
073:带参数的方法定义和调用:
public static void 方法名(参数){}
eg:public static void 方法名(数据类型 变量名){}
public static void 方法名(数据类型 变量名1,数据类型 变量名2,){}
定义方法时候参数中数据类型和变量名都不能少
定义方法时候多个参数之间使用逗号分割
带参数方法调用:方法名(参数)
方法调用时候参数的数量和类型必须与方法定义中的设置相匹配
074形参(方法定义中的参数)实参(常量值,变量名)
075带参数方法练习:
076带返回值方法的定义和调用
public static 数据类型 方法名(参数){
return 数据;
}
public static boolean isEvenNumber(int number){
return true;
}
public static int getMax(int a ,int b){
return 100;
}
078方法的注意事项:
1.方法只能独立定义,不能嵌套定义
2.void表示无返回值,return可以省略,如果加上return后面不加数据
方法通用格式:public static 返回值类型 方法名(){
方法体;
return 数据;
}
080:方法重载:同一个类中定义的多个方法之间的关系,满足以下条件的方法相互构成重载:
1多个方法在同一个类中
2多个方法具有相同的方法名
3多个方法的参数不相同,类型不同或者数量不同,
方法重载特点:重载仅对应方法的定义,与方法调用无关,调用方式参照标准格式,重载仅针对同一个类中方法的名称和参数进行识别,与返回值无关,换句话说不能通过返回值来判定两个方法是否相互构成重载
方法重载例子:同一个类中,方法名相同,参数列表不同
public class MethodDemo{
public static float fn(int a){}
public static int fn(int a,int b){}
}
public class MethodDemo{
public static void fn(int a){}
public static int fn(double a){}
}
调用方法时候,Java虚拟机通过参数的不同区分同名方法
081:方法重载练习;
使用方法重载思想设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
1定义比较两个数字是否相同的方法compare()的方法,参数选择两个int参数
public static boolean compare(int a,int b){
return a==b;
}
2定义对应的方法重载方法,变更对应的参数类型,参数变更为两个long型参数
082方法的参数传递:
方法参数传递(基本类型):基本数据类型参数,形式参数改变不影响实际参数值
083引用类型方法参数传递(引用类型):引用类型参数,形式参数改变影响实际参数(实际运行过程在视频083)
084数组遍历;
085数组最大值:获取数组中元素最大值,调用方法输出结果
086Debug:程序调试工具,用于查看程序执行流程,可以用于追踪程序执行过程来调试程序
1加断点,2运行加了断点的程序,3看哪里,4点哪里,5删除断点
如果数据来自键盘输入,要输入数据,不然不能继续运行
089减肥计划案例:
需求:输入星期数,显示今天的减肥活动
周一:跑步
周二:游泳
周三:慢走
周四:动感单车
周五:拳击
周六:爬山
周日:好好吃一顿
092不死神兔(斐波那契数列)
1,
1,
2,
3,
5,
094数组元素求和:
元素68,27,95,88,171,996,512,210,求出数组中满足要求的元素和,要求;求和元素个位和十位都不能是7,并且只能是偶数
095数组内容比较;设计一个方法比较两个数组内容是否相同:
静态初始化两个数组
定义一个方法用于比较两个数组内容是否相同,返回值boolean
先比较长度,长度相同再比较内容,长度不相同返回false
096arr={19,28,37,46,50};键盘录入一个数据,查找该数据在数组中的索引,病控制台输出找到的索引值
097反转已知数组:arr={19,28,37,46,50}
交换后arr={50,46,37,28,19}并且控制台输出
for(int start =0,end=arr.length-1; start<=end;start++,end–){
int temp = arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
098评委打分:
六个评委为选手打分,分数0-100,选手最后得分:去掉一个最好分,去掉一个最低分,最后的四个评委平均分(不考虑小数部分)
099面向对象基础:类和对象
对象的定义:汽车,人,电脑
面向对象:人关注具体事物信息
类:类是对现实生活中一类具有共同属性和行为的事物的抽象(不存在于客观世界)
类的特点:
1类是对象的数据类型
2类是具有相同属性和行为的一组对象的集合
属性:对象具有的各种特征,每个对象的每个属性,都拥有特定的值
对象的行为:对象能够执行的操作(对象的功能,能够干什么)
区分好类和对象的区分和关系:类是对象的抽象,对象是类的实体
100类的定义:
类是Java程序基本组成单位
类是什么:是现实生活中具有相同属性和行为事物的抽象,确定对象将会拥有属性和行为
类=属性+行为
属性:类中通过成员变量体现
行为:类中通过成员方法体现,(去掉static)
定义一个类
public class 类名{
成员变量
方法1
}
101:对象的使用:
创建对象:
类名 对象名 =new 类名();
Phone p = new Phone();
对象使用:
对象名.变量名
p.brand
使用成员方法:
对象名.方法名()
p.call();
102学生:
定义一个学生类,定义一个学生测试类,在学生测试类中通过对象完成成员变量和成员方法使用
103对象栈内存,堆内存
栈:方法
堆:数据
104多个对象栈内存,堆内存
106成员变量和局部变量:
成员变量:类中方法外的变量
局部变量;方法中的变量
成员变量和局部变量区别:
1.成员变量在类中,方法外。局部变量在方法内
2.成员变量在堆内存,局部变量在栈内存
3.生命周期不同:成员变量随着对象存在而存在,消失而消失
局部变量。随着方法调用而存在,随方法调用而消失
4成员变量有默认初始值,局部变量没有默认初始值,先定义后使用
107privated关键字:
1是一个权限修饰符,可以修饰成员变量和成员方法,作用是保护成员不被别的类使用,被privat修饰的成员只在本类才能访问
private修饰的成员变量,如果需要被其他类使用,需要相应的操作:
get变量名()方法,用于获取成员变量的值,方法用public修饰
set变量名(参数)方法,用于设置成员变量的值,方法用public修饰、
109this:
111封装:
面向对象三大特征:封装,继承,多态
封装:面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部,外界无法直接操作
封装原则:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问,成员变量private,提供对应的getXXX() setXXX() 方法
第一周:难点攻克
新建操作:file——project structure——modules——+——
导入模块:file——project struc——import modules
删除模块:在模块所在文件夹删除模块
因为只new 了一个Student(),所以s1,s2内存中都指向这一个new Student()
输出时因为指向同一个内存,所以输出结果也一样
private:关键字:是一个权限修饰符,可以修饰成员变量,成员方法
作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问
private修饰的成员变量,如果被其他类使用,需要提供get变量名()方法,获取成员变量的值,public修饰
提供set变量名(参数),用于设置成员变量的值,public修饰
this关键字:用来指代变量名称(成员变量)
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问(例如private,getXXX(),serXXX())方法
封装优点:通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码复用性
构造方法是一种特殊的方法:
格式:public class 类名{
修饰符 类名 (参数)
}
public class Student{
public Student();
}
构造方法主要是完成对象数据初始化
115API:application programming interface应用程序编辑接口
JavaAPI:指的是jdk中提供的各种功能Java类,这些类将底层的实现封装起来,不需要关心这些类如何实现,只要学习这些类如何使用,可以通过帮助文档来学熟悉API如何使用
116API练习;
按照帮助文档使用步骤学习Scanner类使用,并实现键盘录入一个字符串,最后输出在控制台
Object
String
StringBuilder
Scanner
Math
Random
Date
DateFormat
SimpleDateFormat
Calendar
System
BigDecimal
117String
String在Java.lang包下,使用不需要导包
String 代表字符串,Java程序中所有字符串文字都被现实为此类的实例,也就是说Java程序中所有的双引号字符串都是String类对象
字符串特点:字符串不可改变,他们的值在创建后不能更改,String类不能被改变,但是可以被共享,字符串效果上相当于字符数组char[] ,但是底层原理是字节数组byte[]
118String构造方法;
String s4 ="abc";//推荐使用方式,直接赋值
System.out.println("s4"+s4);
119String对象特点
new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同,
120字符串比较
==:基本数据类型,比较的是数值是否相同
==:引用类型,比较的是地址值是否相同
字符串是对象,他的比较内容是否相同,通过一个方法实现:equals()
public boolean equals(object object)将此字符串与是定对象比较,由此比较的字符串对象,所以参数直接传递一个字符串
121用户登录
已知用户名和密码,用程序实现模拟用户登录,总共三次机会,登陆之后给出提示
122遍历字符串
键盘录入一个字符串,使用程序实现在控制台遍历字符串
1键盘录入一个字符串,Scanner实现
2遍历字符串,首先要获取字符串中每一个字符
public char charAt(int index):返回指定所引出char的值,字符串的索引也是从0开始
3遍历字符串,其次要能够获取到字符串长度,
public int length()返回此字符串长度
数组长度,数组名.length
字符串长度:字符串对象.length()
4遍历字符串通用格式
for(int i=0;i<s.length;i++){
s.charAt(i);
}
122字符串遍历
package com.ALL;
import java.util.Scanner;
public class Test122_StringTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String line = sc.nextLine();
// System.out.println(line.charAt(0));
//System.out.println(line.charAt(1));
//System.out.println(line.charAt(2));
//for (int i = 0; i < 3; i++) {
// System.out.println(line.charAt(i));
//}
//System.out.println(line.length());
for (int i = 0; i < line.length(); i++) {
System.out.println(line.charAt(i));
}
}
}
123统计字符次数
键盘录入一个字符串,统计该字符串中大写字符,小写字符,数字字符出现次数(不考虑其他字符)
1键盘录入一个字符串,Scanner实现
2统计三种类型字符,定义三个统计变量,初始值0
3遍历字符串,得到每一个字符
4判断该字符属于哪一种类型,然后对应类型统计变量+1
加入ch是一个字符,要判断属于他的大写,小写,还是数字,直接判断字符是否在对应范围内即可
大写字母:ch>=‘A’&&ch<=‘Z’
小写字母:ch>=‘a’&&ch<=‘z’
数字:ch>=‘0’&&ch<=‘9’
输出三种类型字符个数
public class Test123_StringStatictics {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String line = sc.nextLine();
int bigCount=0;
int smallCount=0;
int numberCount=0;
for (int i = 0; i < line.length(); i++) {
char ch=line.charAt(i);
if(ch>='A'&&ch<='Z'){
bigCount++;
}else if(ch>='a'&&ch<='z'){
smallCount++;
}else if(ch>='0'&&ch<='9'){
numberCount++;
}
}
System.out.println("大写字母个数"+bigCount);
System.out.println("小写字母个数"+smallCount);
System.out.println("数字个数:"+numberCount);
}
}
124字符串拼接
定义一个方法,把int数组中的数据按照指定格式拼接成字符串返回,调用该方法并在控制台输出结果,数组int[] arr={1,2,3} 执行方法之后输出结果[1,2,3]
步骤:1定义一个int数组,静态初始化数组元素的初始化
2定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,返回值类型String,参数列表int[]arr
3在方法中遍历数组,按照要求进行拼接,
4调用方法,用一个变量接收结果
5输出结果
package com.ALL;
public class Test124_JointString {
public static void main(String[] args) {
int[] arr={1,2,3};
String s= arrayToString(arr);
System.out.println("s:"+s);
}
public static String arrayToString(int[]arr){
String s="";
s+="[";
for (int i = 0; i < arr.length; i++) {
if(i == arr.length-1){
s+=arr[i];//最后一个
}else{
s+=arr[i];
s+=", ";
}
}
s+="]";
return s;
}
}
面向对象概述:
1类与方法
2构造方法
3访问权限
4继承
5多态
6抽象与接口
7内存分析