复习
排序
冒泡排序
核心思想:相邻比较,交换位置选择排序
核心思想:寻找最值位置与交换位置,进行交换JDK提供的排序
核心思想:快速排序 类:Arrays 提供的方法: sort(数组);排序,默认从小到大 toString(数组);将数组转换为字符串
查找
顺序查找
核心思想:逐个对比二分查找
核心思想:折半法 注意: 1.使用二分查找的数组必须是有序的
杨辉三角
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ...
算法刷题网站
牛客 力扣
今日
编程思想
面相过程
概述:按照事物的发展顺序思考问题 个人短见:就是以流程顺序为主,在代码中就是从上到下,没有变通可言.就如A吃了一碗饭,A放了一个屁,A吃了一碗饭.面相过程就是把其依次用代码表示出来. 将大象装进冰箱里 1.打开冰箱门 2.放入大象 3.关闭冰箱门面相对象
概念:先考虑事物中存在的对象有哪些,再建立对象与对象的关系 个人短见:会对需求进行细致的划分,目的是为以后出现相似的就可以用定义好的类来创建对象.就比如A吃饭放屁.面相对象就会找处其中的A(对象),A会吃饭放屁(方法),如果有姓名性别也会写进去(属性). 将大象装进冰箱里 1.存在的对象有 冰箱 大象 2.关系(事物发展顺序) 冰箱开门 放大象 冰箱关门
对象
概念:万事万物皆对象 生活中:有具体的指向性,真实存在(昨天下午开的会可以,明天开的会就不可以;张三这个具体的人就可以,男人这种泛指几不行) 代码中:在代码中存在的事物
类
概念:多个对象抽取其相同点形成的概念 生活中:概念,如人类,狗类,飞机(没有具体指向,泛指) 代码中:创建对象的模版
类与对象的关系
生活中:先有对象,后有类 代码中:先有类,后有对象 一个类可以有多个对象,多个对象可以属于同一个类
类的定义与组成
定义
语法: 访问权限修饰符 class 类名{ } 访问权限修饰符: 暂时使用public 类名: 1.同一个文件夹下,类名不能相同 2.大驼峰命名(每个单词的首字母大写) //如: //定义一个狗类 public class Dog{ } //定义一个人类 public class Ren{ }
组成
属性: 别名:全局变量,成员变量 如:人的姓名,性别,年龄,肤色等 作用:描述事物的静态特征 定义的位置:类中,方法以外 语法格式: 访问权限修饰符 数据类型 属性名; public int age; 成员变量与局部变量的区别 成员变量: 声明在类中,方法外 有默认值,基本数据类型默认为0;引用数据类型默认为null 作用域:当前类中 生命周期:随着所属的对象的创建而生成,随着所属的对象的销毁而销毁 局部变量: 方法中 没有默认值 作用域:当前代码块中 生命周期:随着方法调用而生成,随着方法执行完毕而销毁//定义一个人类 public class Person{ //定义属性 public String name; public char sex; }方法: 作用:描述事物的动态特征 位置:类中方法外 语法格式: 访问权限修饰符 修饰符 返回值类型 方法名(形参列表){ 方法体 } public void fangFa(int a,double b){ 方法体 } 修饰符:暂时不写 别名:函数,成员函数,成员方法 构造函数: 本质:特殊的方法 作用:创建该类对象 位置:类中方法外 语法: 访问权限修饰符 构造函数名(形参列表){ 方法体 } 注意: 1.构造函数没有返回值类型 2.构造函数中没有返回值 3.构造函数名必须与类名一致☆ 4.使用new关键字调用 5.如果一个类中有多个构造函数,那么这些构造函数绝对是重载关系 6.一个类一定会有一个构造函数,如果没有定义构造函数,系统会为其提供一个无参构造,如果一个类中有构造函数,系统将不会提供无参构造. 7.构造函数不能形成递归 名词: 1.无参构造:构造函数没有形参 2.有参构造:构造函数有形参 3.全参构造:构造函数的形参一一对应该类的属性//定义人类的类 public class Person{ //定义属性(可不定义) public String name; String sex; //可以不写public //定义无参构造 public Person(){} //定义有参构造(属性全写就是全参构造) public Person(String name,String sex){ } }
对象的创建与使用
创建
语法: 数据类型 对象名 = new 构造函数(); 数据类型:就是该对象所属类的类名,就是类名 面试题: Cat cat = new Cat();做了什么 步骤: 1.使用new关键字在堆内存中开辟一片空间 2.赋初值(就是默认值) 3.执行构造函数中的代码 4.将堆中的地址赋值给栈中的引用使用
操作属性
获取属性值 语法: 对象名.属性名 修改属性值 语法: 对象名.属性名 = 值;调用方法
语法 对象名.方法名(实参列表);
this关键字
含义:谁调用this所在的方法,this就表示谁
场景1:当局部变量与成员变量名称相同时,使用this区分
成员变量(属性) this.属性名//类 public class People{ //属性 public String name; //构造函数 public People(String name){ this.name = name; //前者指的是类中的属性name //后者是形参列表中的自定义变量名name } }public class People{ public String name; public People(String name){ name = name; //就近原则,第一个name是形参的,第二个也是形参的 } }场景2:在本类方法中使用本类的属性或方法,默认用this调用,此时this可以忽略不写
public class People{ public String name; public String sex; public People(String name){ name = name; String a = sex; a = this.sex;//和上面一样 } }场景3:在本类构造函数中调用本类其他构造函数
语法: this(实参列表); 注意: 必须在构造函数第一行使用
练习
汤姆抓杰瑞,斯巴鲁说天经地义 对象: 汤姆 杰瑞 斯巴鲁 类: 猫类 属性: 姓名 性别 方法 抓(老鼠) 老鼠类 属性: 姓名 狗类 属性: 姓名 方法: 说 环境类 main 构造对象与对象的关系
小明坐公交车 对象: 小明 公交车 类: 人类 属性: 姓名 方法: 上车 坐车 下车 class Person{ //属性 //访问权限修饰符 数据类型 属性名; public String name; //构造函数 //访问权限修饰符 构造函数名(形参列表){ // 方法体 //} public Person(){ } public Person(String name){ this.name = name; } //方法 //访问权限修饰符 返回值类型 方法名(形参列表){方法体} public void upCar(Car car){ System.out.println(name+"上"+car.type); } public void sitCar(Car car){ System.out.println(name+"坐"+car.type); } public void downCar(Car car){ System.out.println(name+"下"+car.type); } } 车 属性: 类型 方法: 开 class Car{ public String type; public Car(){} public Car(String type){ this.type = type; } public void on(){ System.out.println(type+"正在启动"); } } 环境类 main 创建小明 创建公交车 小明.上车 小明.坐车 车开 小明.下车 Person p = new Person("小明"); Car c = new Car("公交车"); p.upCar(c); p.sitCar(c); c.on(); p.downCar(c);
定义一个矩形类 要求: 属性有,长,宽 方法有,面积(那个矩形调用,就计算那个矩形的面积),周长(那个矩形调用,就计算那个矩形的周长) 创建两个矩形,分别是长1,宽5.长2,宽3. 计算长2宽3的面积,计算长1宽5的周长 对象: 矩形1:长1宽5 矩形2:长2宽3 类: 矩形类 属性 长 宽 方法 周长 面积 class Rect{ public int len; public int wid; public Rect(){ } public Rect(int len,int wid){ this.len = len; this.wid = wid; } public int zhouChang(){ return (this.len + this.wid) * 2; } public int mianJi(){ return this.len * this.wid; } } 环境类 main 创建矩形1 Rect r1 = new Rect(1,5); 创建矩形2 Rect r2 = new Rect(2,3); 矩形2.面积(); int mj = r2.mianJi(); System.out.println(mj); 矩形1.周长(); int zc = r1.zhouChang(); System.out.println(zc);
作业
1,整理笔记 2,如何定义一个类? 访问权限修饰符 class 类名{} 3,类的组成有哪些?有什么作用?定义的语法格式是什么?在哪定义? 属性 方法 构造函数 4,如何创建一个对象? new 构造函数(); 5,如何使用对象调用属性与方法☆ 6,定义两个类,描述如下: 1)定义一个人类Person: 1.1)定义一个方法sayHello(),可以向对方发出问候语“hello,my name is XXX” 1.2)有三个属性:名字、年龄、体重 2)定义一个PersonCreate类: 2.1)创建两个对象,分别是zhangsan,33,173;lishi,44,174 2.2)分别调用对象的sayHello()方法。 7,创建一个Address 类,描述如下: 该类有两个属性, 1)String 类型的address,表示地址;2)String 类型 的zipCode,表示邮编。 2)定义成员方法:show方法,显示 address和邮信息 例如: 地址是: xxx 邮编是:xxx 3)定义AddressTest测试类, 给成员变量赋值和测试成员方法 8,定义一个游戏类, 包括游戏的属性包括:游戏名,类型,大小,星级, 介绍等, 可以调用方法输出游戏的介绍。 9,编写 Car 类,属性有品牌(brand)和颜色(Color), 定义 show 方法,打印所有属性。(还没有学习封装,现在都给成员变量不加入private) 10,编程题--->定义对应的类,提供成员变量和成员方法,在对应的测试类中测试 成员方法--自己分析可以有返回值或者没有返回值直接输出都行 1.学生事物 属性:姓名,年龄,性别,发型 行为:吃饭,抽烟,打游戏,学习Java 2)手机事物 属性:品牌,颜色,价格,内存 行为:打电话,拍照,聊天 3)键盘录入长方形的长和宽,长方形事物的行为 计算长方形的周长和面积, 请使用面向对象的方式分别定义对应的类,然后再对应的xxxTest类中进行测试;分别完成上面三个小题 11,Student s = new Student();做了那些事情? 12,this的含义是什么?三种使用场景是什么?注意什么?