序章、Java开发环境的准备1、窗口winr常用指令2、 用记事本编写第一个代码文档后缀必须是.java并且所有的都要用英文输入使用winr对程序进行编译如下是运行步骤3、配置环境变量右击此电脑点击属性再点击高级系统设置再点击环境变量里面上下用户变量和系统变量进行新建JAVA_HOME如图再点击FATH编辑再新建【%JAVA_HOME%\bin】最后确认及设置完环境变量配置完后 winr里面进行Java和javac进行测试是否成功一、进制转换1、二进制介绍1、二进制转十进制八进制、十六进制也是同理二进制转为十进制要从右到左用二进制的每个数去乘以2的相应次方2、十进制转二进制3、 八进制与十六进制转化二进制2、 计算机存储单元二、JAVA基础语法1、注释单行注释//一次只能注释一行快捷键ctrl/ 多行注释/* */可以注释多行快捷键ctrlshift/ 文档注释/** */2、字面量数据在程序中的书写格式格式要求字符必须单引号围起来有且仅能一个字符。 字符串必须用双引号围起来。特殊值书写格式true、false、null空、\n相当于回车、\t 退格相当于tab3、变量变量是用来记住程序要处理的数据的。public class java1 { public static void main(String[] args) { /*变量的定义格式*/ /* 数据类型 变量名称 * 数字的数据类型有int整型double小数 * ‘’是赋值 * 变量名称自己定义*/ int age 18; System.out.println(age);//打印18 } }注意事项 1、变量要先声明才能使用2、变量是什么类型就应该用来装什么类型的数据否则报错public class java1 { public static void main(String[] args) { int age十八岁//此处报错 System.out.println(age);//打印18 } }3、变量是从定义开始到“}”截止的范围内有效且同一个范围内定义的多个变量它们的名称不能一样。public class java1 { public static void main(String[] args) { int b 16; { int a 18; } System.out.println(a);//不在一个范围内报错 int b 20; //重复定义一个变量报错 } }4、变量定义的时候可以不赋初始值但在使用时变量里必须有值否则报错。4、常量1、标识常量 标识常量使用一个标识符来代替一个常数值定义如下 final 数据类型 常量名 值 如 final int a 0 其中final是关键字说明再后面定义的是常量即不能被其他程序修改的量最终量 2、直接常量 直接出现在程序语句中的常量如如3.14 333等 }5、标识符、关键字关键字是java用了的我们就不能用来为做为类名、变量名否则会报错关键字1、由数字、字母、下划线(_)和美元符($)等组成2、不能以数字开头、不能用关键字做为名字、且是区分大小写的。6、数据类型1、数据类型分类注意 1、随便写的整数字面量默认是int类型变换long类型的话需要L 如long a 99999999999999999999;//此处会报错因为超出了默认int的范围 正确方法 long a 99999999999999999999L//转换成了long类型 2、随便写的小数字面量默认是double类型变换程folat类型需要F 如 float b 123.22//此处会报错此处没有转换成float型 正确float b 123.333F//此处转换成了folat型 3、注意点当数字比较打的时候使用科学计数 1.23e13123乘以10的11次方0.1e-81*10的-9次方引用数据类型stringstring name 你好//也就是字符串类型 System.out.println(name);//打印你好2、类型转换1、自动类型转换类型范围小的变量可以直接赋值给类型范围大的变量byte a 100; short b a; int c b; long d c; float e d; double f e;//以上均可以自动转换 char p a;//字符类型也可以转化成int类型打印‘a’对应的ACII值2、 表达式的自动类型转换在表达式中小范围类型的变量会自动转换成表达式中较大范围的类型再参与运算注意表达式的最终结果类型由表达式中的最高类型决定。在表达式中byte、short、char 是直接转换成int类型参与运算的。1、最终类型由表达式中的最高类型决定。 byte a 10; byte b 20; long c 30; long rs a b c ;//此处的最高类型是long所以定义的结果是long类型 System.out.println(rs); double rs2 a b c 1.0;//因为此处的最高类型是double所以定义double类型 2、byte short char是直接转换成int类型参与运算的。 byte i 10; short j 30; short l ij;//此处会报错因为运行计算直接转换成int类型进行计算的 正确int l i j;3、强制类型转换默认情况下大范围类型的变量直接赋值给小范围类型的变量会报错可以强行将类型范围大的变量、数据赋值给类型范围小的变量。强制类型转换 数据类型 变量 (数据类型)变量、数据 int a 20; byte b (byte) a;//快捷键 altenter 注意强制类型转换可能造成数据(丢失)溢出 浮点型强转成整型直接丢掉小数部分保留整数部分返回7、运算符1、基本的算术运算符、符号做连接符 、-、 *、 /、 %注意如果两个整数做除法其结果一定是整数因为最高类型是整数如需变成小数*1.0或设置double与字符串做运算时会被当成连接符其结果还是字符串。能算则算不能算则拼接2、自增自减运算符 、-- 只能操作变量不能操作字面量的 注意、--不单独使用时 放在变量的前面先对变量进行1、-1再拿变量的值进行运算。 放在变量的后面先拿变量的值进行运算再对变量的值进行1、-13、赋值运算符注意赋值运算符隐含了强制类型转换4、关系运算符判断数据是否满足条件最终会返回一个判断的结果这个结果是布尔类型的值true或者false。int a 12; int b 20; //ab不能直接这样进行关系运算需要定义布尔类型 boolean boolean c a b;//定义一个新的变量来接受他俩的关系运算定义的变量需要是布尔类型的 //或者直接在输出的地方进行判断 System.out.println(ab);//直接进行判断答案为false5、 逻辑运算符int i 10; int j 20; System.out.println( i 100 j99);//逻辑短路即以后的不执行 System.out.println(j);//j打印为20 System.out.println(i 100 j99);//但此时普通逻辑运算会执行 System.out.println(j);//打印为216、三元运算符格式条件表达式 ? 值1 : 值2关系表达式的值如果值为true返回值1如果为false返回值2。int a 18; //字符串型第一个字母要大写 String c a18 ? 成年了: 未成年; //想要输出的类型定义要是数字的话定义int System.out.println(c); //输出成年了7、运算符的优先级8、JAV程序API输入函数package com.learn.Heima.ZS; import java.util.Scanner; public class DO1 { public static void main(String[] args) { // 输入函数使用 // 1、导包在顶部导入一个Scanner的包ideale软件中输入在使用Scanner时会自动导包 // 2、抄写代码得到一个输入函数 Scanner Y new Scanner(System.in);//Scanner后面的Y是自己设置的名字 // 3、调用Y.使用输入功能 // 实例 System.out.println(请输入你的年龄); int age Y.nextInt(); //接受上面从接受到的数据因为设置的是nextInt则接收int型 System.out.println(你的年龄是 age); System.out.println(请输入你的姓名); String name Y.next(); //接受上面从接受到的数据因为设置的是nextInt则接收string型 System.out.println(你的姓名是 name); } }9、关于System.out.println用方法换行可以直接用 System.out.println( );//里面为空就行打印一行多个的时候用System.out.print( );//不带ln三、流程控制1、分支结构1、if语句if分支有三种形式: 1、if条件表达式{ 代码 } 2、if条件表达式{ 代码 }else{代码} 3、if (条件表达式1) { 代码1; } else if (条件表达式2) { 代码2; } else if (条件表达式3) { 代码3; } else { 代码n; }2、switch语句语法 switch(表达式){ case 值1: 执行代码...; break; case 值2: 执行代码...; break; case 值n-1: 执行代码...; break; default:执行代码n;}正常使用switch的时候不要忘记写break否则会出现穿透现象。利用穿透简化程序 a 1; switch(a){ case 1: case 2: case 3: System.out.println(我爱学习); break; //此处1-3都进行打印我爱学习 }2、循环结构1、for循环{先判断后执行}语法 for (初始化语句; 循环条件; 迭代语句) { 循环体语句(重复执行的代码); }2、while循环 {先判断后执行}语句 初始化语句 while(循环条件){ 循环体语句被重复的代码 迭送代码变量的自增 }3、do-while循环 {先执行后判断}语句 初始化语句; do { 循环体语句;循环的语句 迭代语句;变量变化 } while (循环条件); 重点do -while 不管怎么样都要执行一次 例如 do{ System.out.println(hello world); }while (false);//会打印 helloworld一次4、 死循环语法 for ( ; ; ) { System.out.println(Hello World1);}//无限循环出helloworld while (true) { System.out.println(Hello World2);}//无限循环出helloworld do { System.out.println(Hello World3);//无限循环出helloworld } while (true);5、循环嵌套外部循环每循环一次内部循环会全部执行完一轮//打印此类时外为行内为列 for (int i 0;i3; i){ for (int j 0;j2;j){ System.out.print();//去掉ln会打印一行的 } System.out.println( );//结果为每行两个心存在三行 }6、跳转关键字break、continuebreak : 跳出并结束当前所在循环的执行。continue: 用于跳出当前循环的当次执行直接进入循环的下一次执行。7、生成随机数 Random的使用import java.util.Random;//第一步导报 public class learn1 { public static void main(String[] args) { //1、导包2、拿到随机数 3、调用随机数 Random Y new Random(); //第二步,定义Y拿到随机数对象 int num1 Y.nextInt(10);//第三步调用随机函数0-9的随机数 //注意nextInt(n)功能智能生成0-n-1的随机数不包含n System.out.println(num1);//打印一个随机数 } }8、Random生成指定区间随机数。公式 Random Y new Random(); //要求打印N-M之间的随机数为整数 int num Y.nexInt(M-N)N //减加法 Random Y new Random(); // 加入需要打印1-10内的随机数则使用减加法整体减1在括号外上刚减去的 int num1 Y.nextInt(9)1;//此直接打印1-10 //打印9-66也是同理 int num2 Y.nextInt(57)9;//此处则打印9-66的数字 System.out.println(num2);四、数组1、静态数组1、静态化初始化数组定义数组的时候直接给数组赋值。1、数组的初始化 格式 数据类型 数组名[] {元素1元素2...元素n}; 例如 int ege[] {11,12,55,66,99}; 2、数组的访问 格式 数组名[索引] System.out.println(ege[0]);//即打印上方的11 3、修改数组中的数据 直接 数组名[索引] 数据 例如 ege[0]22;//把下标为0的11改为了22 4、数组的长度数组元素个数 System.out.println(ege.length);//5个元素 技巧获取数组的最大索引:arr.length-1(前提是数组中存在数据) System.out.println(ege.length-1);//最大索引下标为52、数组的遍历就是一个一个数据的访问。列如 int[] ages {20, 30, 40, 50}; for (int i 0; i ages.length; i) { System.out.println(ages[i]);//依次以0为所以打印到数组的长度 }2、动态初始化数组定义数组时先不存入具体的元素值只确定数组存储的数据类型和数组的长度格式 数据类型[] 数组名 new 数据类型[长度] 如 int arr[] new int[2];//定义一个int类型的2个长度的数组1、动态初始化数组元素默认值规则数据类型明细默认值基本类型byte、short、char、int、long0float、double0.0booleanfalse引用类型类、接口、数组、Stringnull2、多个数组变量指向同一个数组对象int arr1[] {1,2,2,3,6,5,9}; int arr2[] arr1; System.out.println(arr2[0]);//打印1因为于arr1指向了同一个地址 arr2[2]6; System.out.println(arr1[2]);//改变了arr2的值同时arr1的值也发生了变化因为在同一个地址五、 方法1、概述方法是一种语法结构它可以把一段代码封装成一个功能以便重复调用语法 修饰符 返回值类型 方法名( 形参列表 ){ 方法体代码(需要执行的功能代码) }示例调用2、方法的其他形式及问题形式形式1 public static void print(){ System.out.println(hello world); }//无参数无返回值声明 形式2 public static void printHelloWorld(int n){ for(int i1;i n; i){ System.out.println(Hello World);} }有参数无返回值方法问题public static int sum(int a, int b){ int c a b; return c;} public static void main(String[] args) { 1、 方法在类中的位置放前放后无所谓但一个方法不能定义在另一个方法里面。 2、方法的返回值类型写void无返回申明时方法内不能使用return返回数据如果方法的返回值类型写了具体类型方法内部则必须使用return返回对应类型的数据。 3、return语句的下面不能编写代码属于无效的代码执行不到这儿。 4、方法不调用就不会执行, 调用方法时传给方法的数据必须严格匹配方法的参数情况。 5、调用有返回值的方法有3种方式 1、可以定义变量接收结果 int rs sum(a:10b:20); System.out.println(rs); 2、或者直接输出调用 System.out.println(sum(a:10b:90)): 3、甚至直接调用 sum( a: 100,b:200); 6、调用无返回值的方法只有1种方式只能直接调用。 }3、Java的参数传递机制 都是值传递所谓值传递指的是在传输实参给方法的形参的时候传输的是实参变量中存储的值的副本。实参在方法内部定义的变量。形参定义方法时“(…)”中所声明的参数。1、基本类型的参数传输存储的数据值。基本类型的参数传递基本类型的参数传输存储的数据值。改变不了值 public class Test { public static void main(String[] args) { int a 10; change(a); System.out.println(a); // 10 } public static void change(int a){ System.out.println(a); // 10 a 20; System.out.println(a); // 20 } }2、引用类型的参数传输存储的地址值。主要学习了引用数组可以改变传输存储的数据值例如public static void main(String[] args) { System.out.println(Hello World); int [] arr {10,20,30}; change(arr); System.out.println(arr[1]);//打印222 } public static void change(int [] arrs){ System.out.println(方法1arrs[1]);//打印20 arrs[1] 222; System.out.println(方法2arrs[1]);//打印222 }4、方法重载一个类中只要一些方法的名称相同、形参列表不同形参的个数、类型、顺序不同那么它们就是方法重载了Java会根据你传入实参的数量、类型自动匹配对应的方法例如public static void test(){ System.out.println(test1); }//1、无形参 public static void test(int a){ System.out.println(test2 a); }//2、有形参 void test(double a){ //3、有形参不同类型 } void test(double a, int b){ //4、两个形参 } void test(int b, double a){ //5、两形参不同顺序 }5、在方法中单独使用return关键字return; 可以用在无返回值的方法中作用是立即跳出并结束当前方法的执行。break; 跳出并结束当前所在循环的执行。continue; 结束当前所在循环的当次继续进入下一次执行六、类与对象1、类与对象语法 1、先创建一个类 public class 类名{ 1、变量用来说明对象可以处理什么数据 2、方法描述对象有什么功能也就是可以对数据进行什么样的处理 } 2、在别的类中main在使用创建的对象 类名 对象名 new 类名(); 对象名.里面的变量 对象名.里面的方法进行打印例如public class Student {//在外面建立一个类 String name;// 姓名 //建立一个方法在里面打印 public na(String name) { System.out.println(我是name); } } //在main函数中使用 Student pr new Student(); pr.name 张三; //调用类里面建立的方法 pr.na();2、注意事项1、类名建议用英文单词首字母大写满足驼峰模式且要有意义比如Student、Car…2、类中定义的变量也称为成员变量对象的属性类中定义的方法也称为成员方法对象的行为。3、成员变量本身存在默认值同学们在定义成员变量时一般来说不需要赋初始值没有意义。{一般字符串型为null其余为0}4、一个代码文件中可以写多个class类但只能一个用public修饰且public修饰的类名必须成为代码文件名。5、对象与对象之间的数据不会相互影响但多个变量指向同一个对象时就会相互影响了。6、如果某个对象没有一个变量引用它则该对象无法被操作了该对象会成为所谓的垃圾对象。3、This1、this就是一个变量 可以用在方法中 用来拿到当前对象2、哪个对象调用方法this就指向哪个对象也就是拿到哪个对象。3、用来解决对象的成员变量与方法内部变量的名称一样时导致访问冲突问题的。如double score ; public void pr( double score ) { if (score score) //两个相同的score不好判断 // 所以用this if (this.score score)//this.score指向了类中的score变量 }4、构造器1、什么是构造器构造器是一种特殊的方法这个方法没有返回值类型方法名与类名一模一样 public class Student { public Student(){}//创建一个无参方法方法名与类名相同的 public Student(double score){}//创建一个有参方法方法名与类名相同的 }2、构造器的使用创建对象时对象会去调用构造器。 Student s1 new Student();//没有传输数据的时候会使用没有参数的方法 Student s2 new Student(100);//传入数据的时候会直接使用带参数的构造器的5、封装 合理隐藏合理暴露公开使用public(公开)进行修饰。隐藏使用private(私有隐藏) 进行修饰。理解//封装就是就是用类设计对象处理某一个事物的数据时应该把要处理的数据以及处理这些数据的方法设计到一个对象中去。 private double score;//私有数据不允许类以外的访问 public void sum(double score) { this.score score//此处就可以给score赋值了 //公有的方法外面设立的对象只能调用此方法 }6、 实体JavaBean实体要求;1、必须私有成员变量并为每个成员变量都提供getset方法2、必须为类提供一个公开的无参数构造器3、实体类只负责数据存取而对数据的处理交给其他类来完成以实现数据和数据业务处理相 分离实例应用7、成员变量、局部变量的区别1、类中位置不同:成员变量(类中方法外)、局部变量(常见于方法中)2、初始化值不同:成员变量(有默认值不需要初始化赋值)局部变量(没有默认值使用之前必须完成赋值)3、内存位置不同:成员变量(存在于堆内存)局部变量(栈内存)4、作用域不同:成员变量(整个对象)局部变量(在所归属的大括号中)5、生命周期不同:成员变量(与对象同生共死)局部变量(方法调用而生方法结束而亡)七、API1、包注意事项1、如果当前程序中要调用自己所在包下的其他程序可以直接调用。同一个包下的类互相可以直接调用2、如果当前程序中要调用其他包下的程序则必须在当前程序中导包, 才可以访问导包格式import 包名.类名;3、如果当前程序中要调用Java提供的程序也需要先导包才可以使用但是Java.lang包下的程序是不需要我们导包的可以直接使用。4、如果当前程序中要调用多个不同包下的程序而这些程序名正好一样此时默认只能导入一个程序另一个程序必须带包名访问。Demo2 d new Demo2(); d.对象里面的方法 //类名相等的情况下需要包全名 learn.Demo2 u new learn.Demo2()2、String1、String概述实例应用//1、直接双引号得到字符中对象其装字符电数据 String name it黑马;//创建一个空白字符串对象不含有任何内容 System.out.println(name);//it黑马 //2、调用String类的构适器初始化字符串对象 // new String创建字符申对象并用构造器初始化字符申 String rs1 new String();//根据传入的字符串内容来创建字符串对象 System.out.println(rs1);//没放入值输出空 String rs2 new String(itheima); System.out.println(rs2);//itheima char[] chars {a,黑,马};//根据字符数组的内容来创建字符串对象 String rs3 new String(chars); System.out.println(rs3);//a黑马 byte[] bytes {97,98,99}; String rs4 new String(bytes);//根据字节数组的内容来创建字符串对象 System.out.println(rs4);//abc{ACII对应的编号}2、String的常用方法实例应用String s itjava; //1、获取字符串长度 length() System.out.println(s.length());//6 //2、提取字符串中某个索引位置处的字符 charAt(下标) char cs.charAt(1);//报取下标为1的字符 System.out.println(c);//t // 3、把字符串转换成字符数组再进行历 toCharArray char chars[]s.toCharArray(); for(int i0;ichars.length;i){ System.out.println(chars[i]);//依次打印字符串里面的每个数据单位 } //4、判断字符串内容 内容一样就返回true否则返回false | equals() String s1 new String(黑马); String s2 new String(黑马); System.out.println(s1s2);//false;因为是判断两个地址是不是一样 System.out.println(s1.equals(s2));//true判断的是两个内容 //5、忽略大小写比较字符串内容 equalsIgnoreCase() String c1 jAVAit; String c2javaIT; System.out.println(c1.equalsIgnoreCase(c2));//true // 6、截取字符串内容(包前不包后)substring(起始下标结束下表) String s3 JAVA是最好的编程语言之一; String rss3.substring(0,8);//截取下表为0到下表为1的数据 System.out.println(rs);//JAVA是最好的 //7、从当前索引位置一直截取到字符串的未尾 substring(8) String rs2s3.substring(8);//截取从下表为5到字符串结尾的数据 System.out.println(rs2);//编程语言之一 // 8、把字符串中的某个内容替换成新内容并返回新的字符串对象 replace(要替换的内容替换成的内容) String infor 这个电影简直是个垃圾垃圾电影; String rs3 infor.replace(垃圾,**); System.out.println(rs3);//这个电影简直是个****电影 //9、判断字符申中是否包含个关键字 contains(要查询的内容) String infor2 java是最好的编程语言之一,我爱javajava不爱我; System.out.println(infor2.contains(java));//true System.out.println(infor2.contains(python));//false //10、判断字符串是否以某个字符串开头 startsWith(内容) String rs4 张三丰; System.out.println(rs4.startsWith(张));//true System.out.println(rs4.startsWith(张三));//true System.out.println(rs4.startsWith(张三丰));//true System.out.println(rs4.startsWith(张三丰2));//false //11、把字符串按照某个指定内容分割成多个字符串放到一个字符串数组中返回给我们 String rs5 张无忌,周芷若,殷素素,赵敏; String[] namesrs5.split(,);//以逗号隔开放进数组 for(int i0;inames.length;i){ System.out.println(names[i]); }//张无忌 周芷若 殷素素 赵敏3、String使用时的注意事项String是不可变字符串对象只要是以“...”方式写出的字符串对象会存储到字符串常量池且相同内容的字符串只存储一份 但通过new方式创建字符串对象每new一次都会产生一个新的对象放在堆内存中。