1.学习目标:
1.1 String常用方法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkEcXZkp-1600514315806)(C:\Users\lenovo\Desktop\String常用方法.png)]
1.2String 类中 对substring/charArr/byteArr/replace的测试
```java
package StringTest;
public class Test {
public static void main(String[]args) {
String string=“abcdefg”;
String newStr= string.substring(0);//开始索引
System.out.println(newStr);//abcdefg
System.out.println("");
String newStr1=string.substring(1);
System.out.println(newStr1);//bcdefg
System.out.println("=");
String newStr2=string.substring(2);
System.out.println(newStr2);//cdefg
//截取字符串那个位置开始到结束
System.out.println("=");
String newStr3=string.substring(2, 3);
System.out.println(newStr3);//c
//截取字符串从那个位置开始到那个位置结束
System.out.println("");
char[]charArr=string.toCharArray();
System.out.println(charArr);
System.out.println("");
byte[]byteArr=string.getBytes();
System.out.println(byteArr);
System.out.println("====");
String str=“cd:ef:g”;
String newStr8=str.replace(":",“1” );//把满足条件的所有的符号都替换了
System.out.println(newStr8);
}
}
```
2.课堂笔记
2.1 静态:
2.1.1 怎么去统计创建对象的数量?
错误案例:
```java
package StringTest;
public class Test1 {
private String name;
private int age;
public Test1(String name,int age) {
count++;
this.name=name;
this.age=age;
}
int count;
}
```
```java
package StringTest;
//怎么去统计创建对象的数量?
//1.思路创建一个对象加一个
public class StudentTest {
public static void main(String[]args) {
func();
Test1 test=new Test1(“李三”,12);//
//test.count++;//1 count只属于某一个对象在调用过程中不会发生改变
Test1 test2=new Test1(“王五”,13);
//test2.count++;//1
System.out.println(test2.count);
}
public static void func() {
Test1 test2=new Test1("张三",14);
// test2.count++;//1
//分析:分别创建了三个对象并且这三个对象都有自己的数据因此
//count统计的只是test/test2/test3创建的它们自己的对象的统计并没有进行累加
}
}
```
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxG3BQ9i-1600514315807)(C:\Users\lenovo\Desktop\怎样统计创建对象错误案例.png)]
正确案例:
```java
package StringTest;
public class Test1 {
private String name;
private int age;
static int count;//属于类的不属于某一个具体的对象或者
//说是属于所有对象的
//静态成员变量 共享
public Test1(String name,int age) {
count++;//当创建对象的时候会进行累加但是只是加自己的
//如果重新创建一个对象那个会重新进行累加
this.name=name;
this.age=age;
}
//int count;//本质上属于对象
}
```
package StringTest;
//怎么去统计创建对象的数量?
//1.思路创建一个对象加一个
public class StudentTest {
public static void main(String[]args) {
func();
Test1 test=new Test1("李三",12);//
//test.count++;//1 count只属于某一个对象在调用过程中不会发生改变
Test1 test2=new Test1("王五",13);
//test2.count++;//1
System.out.println(test2.count);
}
public static void func() {
Test1 test3=new Test1("张三",14);
// test2.count++;//1
//分析:分别创建了三个对象并且这三个对象都有自己的数据因此
//count统计的只是test/test2/test3创建的它们自己的对象的统计并没有进行累加
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRJF7aUp-1600514315814)(C:\Users\lenovo\Desktop\正确案例.png)]
2.1.2 Static的含义及定义:
```java
package StringTest;
/***
- Static 含义:静态的
- @author lenovo
*static 的定义:它可以修饰成员变量和成员方法被修饰的成员是属于类的而不是单纯只属于某个对象
*也就是说既然属于类就可以不用对象调用了。
*Static 的定义: -
Static 数据类型 变量名;
*Static 的调用:
-
类名.静态成员变量
- 不加Static:成员变量
-
为了区分静态成员变量和普通成员变量诞生了一个新的名词(实例成员变量(成员变量))
- 实例成员属于某一个实例用对象调用
- 对象.实例成员
*/
public class Test1 {
private String name;
private int age;
static int count;//属于类的不属于某一个具体的对象或者
//说是属于所有对象的
//静态成员变量 共享
public Test1(String name,int age) {
count++;//当创建对象的时候会进行累加但是只是加自己的
//如果重新创建一个对象那个会重新进行累加
this.name=name;
this.age=age;
}
//int count;//本质上属于对象
}
```
package StringTest;
//怎么去统计创建对象的数量?
//1.思路创建一个对象加一个
public class StudentTest {
public static void main(String[]args) {
func();
Test1 test=new Test1("李三",12);//
//test.count++;//1 count只属于某一个对象在调用过程中不会发生改变
Test1 test2=new Test1("王五",13);
//test2.count++;//1
// System.out.println(test2.count);//对象也可以调用
System.out.println(Test1.count);//类调用
//静态成员使用类调用而不使用对象调用(强烈建议使用类调用)
}
public static void func() {
Test1 test3=new Test1("张三",14);
// test2.count++;//1
//分析:分别创建了三个对象并且这三个对象都有自己的数据因此
//count统计的只是test/test2/test3创建的它们自己的对象的统计并没有进行累加
}
}
2.1.3 静态变量/静态方法/静态块的含义,定义以及具体案例的应用:
```java
package StaticDemo;
import java.util.ArrayList;
public class Student {
//实例成员变量
private String name;
private int age;
public void func() {
}
public Student(String name, int age) {
//count++;//如果将统计次数的变量放入构造其中在进行统计的时候只是
//将当时自己创建的对象进行统计并没有统计其他的
count++;
this.name = name;
this.age = age;
}
//静态成员变量
//静态成员变量共享
static int count;//本质是是属于对象的
//在成员变量名前加一个static成员变量就变成了静态的成员变量属于整个类
//共享
//static 静态的
//它可以修饰成员变量和成员方法 被修饰成员变量和成员方法 被修饰的成员是属于类的而不是单单属于某个对象
//也就是说 既然属于类 就可以不用对象调用了
//语法:
//static 数据类型 变量名
//调用:
//类名.静态成员
//sweep打扫
//静态方法语法 :
// public static void func(){}
public static void sweep() {
//sweep方法属于整个类
//静态方法的调用:用类名去调用
//类名.静态方法(参数列表)
if(count>0) {
System.out.println("有人打扫卫生");
}else {
System.out.println("留一个人打扫卫生");
}
}
static ArrayList<Integer> list;//只是在栈上保存了一个地址并没有开辟内存(引用类型在使用之前必须初始化)
//引用类型不初始化不能用
static {
//引用类型在静态代码块中进行初始化
list=new ArrayList<>();
//如果一个静态的引用类型不再静态代码块中初始化则会报错 java.lanq.NullPointerException(空指针)
}
//引用类型在静态代买块中初始化了在调用的时候直接调用不用初始化了
}
```
2.1.4静态方法/静态代码块/静态成员变量在使用的时候要注意哪些东西以及Math方法的学习:
```
package StaticDemo;
/**
*static 静态
- 一开始怎么分类的:
- class类名{
- 成员变量
- 成员方法
- }
- 新的分类:
- class类名{
- 静态成员
- 实例成员
- }
- 静态成员变量
*静态成员方法
*静态代码块
*静态的应用场景:工具类(共享) 工具类都会写成静态的
*例如:算法 - Math作用:数学计算 (提供的都是静态方法)
*/
import java.util.ArrayList;
//如何统计程序里边创建了多少个对象?
//1.通过变量统计
//学生类里边提供一个变量来统计
public class StudentTest {
public static void main01(String[]args) {
func();
func2();
//创建三个不同的对象而且每一对象都有自己的数据
Student stu1=new Student("李三",12);
// stu1.count++;//count 属于某一个具体的对象
Student stu2=new Student("张三",14);
//stu2.count++;
// System.out.println(stu1.count);
System.out.println(Student.count);
//static修饰的成员变量可以用对象调用 但是强烈建议使用类调用
Student.sweep();
//写一个静态变量 然后在外边初始化 (写一个静态变量然后在外边初始化倒不如把静态变量写在外边)
Student.list=new ArrayList<>();
Student.list.add(1);//NullPointerException(空指针)
}
public static void func() {
Student stu2=new Student("王五",14);
//stu2.count++;
}
//
public static void func2() {
System.out.println("测试");
}
//为什么在写的代码的时候习惯在测试的时候都是用静态的类里边都是非静态的?
//为什么在外部调用的时候要加static
//在外部调用如果不加static 就无法测试
//如果在测试的时候创建的方法没有使用static创建方法在调用的时候只能使用对象调用
//StudentTest student =new StudentTest();
//student.func2();
//测试类也可以创建对象
//this.func2
//静态方法使用的注意事项:
//1.静态方法可以直接访问类的静态变量和静态方法但是不能访问实例的成员变量和方法
//解释说明:先有的实例成员还是现有的静态成员?静态成员先于实例成员出现
//2.实例成员可以访问静态成员
//3.静态方法中不能出现this关键字 this关键字就是调用本类方法的对象
//实例 创建对象才能调用其中的方法
//静态方法没有提供静态的构造函数但是提供了静态代码块static{ }
//静态代码块无法调用 类加载的时候自己执行
//静态代码块可以初始化资源
public static void main(String[]args) {
int a= Math.abs(-1);//
//如果把常用的功能封装起来的时候也不是面向对象里的对象可以写成一个工具类
//Math是一个工具类
//知道 一个方法可以求任意一个数都是都可以求绝对值(重载)
System.out.println(a);
int min=Math.min(100, 89);
System.out.println(min);
Double number2=Math.ceil(12.99);//向上取整
System.out.println(number2);
//ceil天花板
//大于等于
Math.floor(12.0001);//向下取整
double number3 =Math.floor(12.999);//向下取整
System.out.println(number3);
}
}
```
2.1.5Arrays数组 :
此类包含用来操作数组(比如排序和搜索)的各种方法
2.1.5.1Arrays方法的学习:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bm0c1P1E-1600514315816)(C:\Users\lenovo\Desktop\Arrays方法的学习.png)]
2.1.5.1Arrays中 toString / sort方法的学习:
```java
package Array;
import java.util.Arrays;//工具
public class ArrayClass {
public static void main(String[]args) {
//Arrays 集合此类包含用来操作数组(比如排序和搜索)的各种方法
//static String toString(float[] a)
// 返回指定数组内容的字符串表示形式。
int [] arr= {4,2,3};
System.out.println(arr);//[I@15db9742 //不写任何转换打印的就是地址
Arrays.sort(arr);//排序
String str=Arrays.toString(arr);//将数组以字符串的形式打印
System.out.println(str);
}
}
```
2.2继承 :
面向对象的三大特性:封装、继承、多态
继承:
2.2.1案例
package ExtendsDemo;
//抽取人的共性
public class Person {
String name;
int age;
}
package ExtendsDemo;
public class Student extends Person {
//保留自己独有的成员
int score;
}
package ExtendsDemo;
public class Test {
//分析
//老师 年龄 姓名 薪资
//学生 年龄 姓名 成绩
//保安 年龄 姓名 事故率
//继承:共性抽取 实现复用
//表示:父类(基类)和子类
//语法:子类 extends 父类
//场景:飞机会飞 老鹰会飞 风筝会飞
//继承的关键子:子类 is a 父类 才可以继承 (什么是什么)
//语法:
//1.子类可以使用父类的内容
//2.父类无法使用子类的内容
//3.子类也可以有自己的内容
//4.父类的私有成员子类是访问不到的(反射可以实现)
//继承关系的规则:
/**
* 1.成员变量
* 不重名
*
* @param args
*/
public static void main(String[]args) {
Student stu=new Student();
stu.name="张三";
System.out.println(stu.name);
}
}
2.2.2继承注意事项:
package ExtendsDemo;
public class Father {
int numberF;
int number;
public void showNumber() {
System.out.println(number);
}
}
package ExtendsDemo;
public class Son extends Father {
int numberS;
int number;
public void showNumber(int number) {
System.out.println(number);//就近原则 先打印局部变量的number (局部变量)
System.out.println(super.number);//父类
System.out.println(this.number);//访问成员变量里的number如果没有会找父类的number(子类)
}
}
package ExtendsDemo;
public class Test {
//分析
//老师 年龄 姓名 薪资
//学生 年龄 姓名 成绩
//保安 年龄 姓名 事故率
//继承:共性抽取 实现复用
//表示:父类(基类)和子类
//语法:子类 extends 父类
//场景:飞机会飞 老鹰会飞 风筝会飞
//继承的关键子:子类 is a 父类 才可以继承 (什么是什么)
//语法:
//1.子类可以使用父类的内容
//2.父类无法使用子类的内容
//3.子类也可以有自己的内容
//4.父类的私有成员子类是访问不到的(反射可以实现)
//继承关系的规则:
/**
* 1.成员变量
* 不重名
*
* @param args
*/
public static void main01(String[]args) {
Student stu=new Student();
stu.name="张三";
System.out.println(stu.name);
}
//父子类中没有重名的成员变量
public static void main02(String[]args) {
Father f=new Father();
Son son=new Son();
f.numberF=1;
son.numberF=2;//Son找变量先找自己的 如果没有(再找Person(父亲))向上找
son.numberS=3;//
}
//重名父子类当中存在重名的成员变量
public static void main(String[]args) {
Father f=new Father();
Son son=new Son();
//直接访问
f.number=100;//肯定是父亲的成员变量的
son.number=200;//访问儿子的成员变量(先从自己的类里边找没有再去找父类的)就近原则
//通过方法间接访问
f.showNumber();//方法内部访问的还是自己的
son.showNumber();//儿子(也是访问自己的)就近原则
//方法属于谁的就会找自己的变量
//如果子类里边没有变量但是又要用方法输出变量的时候 会调用父类的成员变量(再继承的前提之下)
//
//父类只能访问自己的而子类先找自己的如果没有再找父类的
}
}
2.2.3场景应用:
切水果
第一个版本:
水果 刀
3.今日单词:
appedn 添加
ceil 天花板
floor 地板
ther();
Son son=new Son();
//直接访问
f.number=100;//肯定是父亲的成员变量的
son.number=200;//访问儿子的成员变量(先从自己的类里边找没有再去找父类的)就近原则
//通过方法间接访问
f.showNumber();//方法内部访问的还是自己的
son.showNumber();//儿子(也是访问自己的)就近原则
//方法属于谁的就会找自己的变量
//如果子类里边没有变量但是又要用方法输出变量的时候 会调用父类的成员变量(再继承的前提之下)
//
//父类只能访问自己的而子类先找自己的如果没有再找父类的
}
}
###### 2.2.3场景应用:
切水果
第一个版本:
水果 刀
# 3.今日单词:
appedn 添加
ceil 天花板
floor 地板
extends 继承 推广