1.内存的组成:
栈(局部变量)
堆:new 出来的对象
常量池:常量 ,静态static 资源===》相同的信息不创建第二个
方法区:
2.this关键字:
代表当前自身对象。
通过this[区分]同名的局部变量和成员变量
this.属性
this.成员方法();
this(); 构造方法之间互相调用的使用。
3.static 静态的
static 可以修饰属性----类变量;
A.提前加载到内存中(常量池),静态资源只加载一次
当前类下所有对象共用该静态资源
B.静态 资源归类所拥有,所有在使用的时候,
可以通过类名.静态资源
4.包:
包的作用:
1.分门别类进行功能代码的存储。
java.util =====工具类。
(特殊)java.lang
String
2. 区分同名类。
java.sql.Date
java.util.
3. 项目中 不存在不在包里的类。
使用包:
1.创建包 new package
2.命名包名:包名有小写字母组成;
包之间的包含关系通过.来表示
一般来说,包名都是项目部署后 访问域名的倒写。
3.导包: import 包名.类名(全局限定名)
import java.util.Arrays;
import java.util.*;
import static java.lang.Math.*;
4.【导包的时候】包之间没有包含关系
/*import com.jr.Car;
import com.jr.day2.Demo1;*/
import com.jr.*; ===>import com.jr.Car;
--X--->import com.jr.day2.Demo1;
5. 代码块 :划分作用域
分类:普通代码块 构造代码块 静态代码块 同步代码块
执行顺序: 静态代码块》 构造代码块》普通代码块
6.面向对象的三大特征:封装 继承 多态
封装----》安全
数据的封装-----为了 数据的安全。
//"数据的封装:通过共有的方法,间接访问/操作 私有的属性"
private int age;
public void setAge(int age){
if(age>0 && age<=100){
this.age=age;
}else{
System.out.println("输入年龄不合理,已赋默认值");
this.age=18;
}
}
public int getAge(){
return this.age;
}
补充说明:
参与者类---->实体类:
标准的实体类:
1.属性私有化
2.提供get/set方法 【身份证号属性特殊,只有get方法 】
3.构造方法:无参和全参构造要有,
4.成员方法
7.继承 ---是为了代码的重用
继承的前提条件:
具有相同的属性和共同行为 ,的一组对象。
这样的类之间可以通过 继承实现代码的重用。
继承: 学生 ,教师 ,员工
不继承: 飞机 鸟 【虽然也有相同的属性和行为:重量,颜色,飞】
A继承的实现步骤:
1.找到多个类中相同的属性和行为,提取出来,放到单独的类里,
这个单独的类,叫父类,超类,基类
2.各个类中 特有的属性和行为,分别存放在各自的类里,
这些各自的类 ,叫子类
3.借助关键字 extends 实现继承(子类对象.父类资源)
B.继承的特性: 单根性 传递性
c
B
A
C.继承有两种方式:
隐式继承: Object类(根基类)
显式继承:类名 extends 父类
D.子类不可以继承父类的哪些资源:
构造方法不可以继承,但是子类可以调用。
E.子类可以使用继承过来的哪些资源:
本类下 同包子类 不同包子类
public V V V
protected V V V
默认的 V V X
private V X X
8.方法的重写:
原因:继承过来的父类方法,不适合解决子类的问题,
子类需要对该方法 做修改,这个修改行为就叫方法的重写。
重写的概念:
子类中,方法名相同,参数列表相同,返回值类型相同或缩小,
访问修饰符相同或扩大 叫做重写。
9.介绍关键字 super:
super指 父类对象。 VS this 指 自身对象。
子类中通过super区分同名父类属性:super.name;
子类中通过super区分同名父类方法:super.getAge();
子类中通过super()调用父类无参构造方法: super();
子类中通过super(实参列表)调用父类有参构造方法: super(实参列表);
10.继承条件下,子类构造方法的执行顺序:
A。先执行父类构造方法,在执行子类构造方法
如果父类还有父类,找到顶级父类,在一层层向下执行构造方法。
B.如果父类没有无参构造方法,要求子类必须手动调用父类的有参构造。
C.如果父类有无参构造方法,开发者没有手动调用的话,程序会自动帮忙调用。
总结:【在子类的构造方法里,第一行必须是调用父类构造方法;
可以手动调用有参或者无参;
也可以程序帮忙调用无参
】
11.抽象类
原因:该类创建出来的对象,在程序中,没有存在的必要。
操作步骤:设置该类为抽象类。
public abstract class Person {
}
====》自定义的父类,都设置为抽象父类。
12.抽象方法
原因: 父类想要子类重写该方法,
父类只需要把该方法设置为抽象方法即可。
总结:但凡需要子类重写的方法,设置为抽象方法就可以了。
补充:一个类如果 有抽象方法,那么该类一定是抽象类。
但是一个类是抽象类,可以没有抽象方法。
【
做题思路:
A.父类设置为抽象类
B.如果所有的子类都对父类中的某一个行为进行了重写,
那么该方法在父类中 需要设置为抽象方法。
】
今天,学习了java的三大特性,练习的代码比较多
例一
Bid类:
package com.jr.date723.bid;
public abstract class Bid {
private String name;
private String color;
public Bid(String name) {
this.name = name;
}
public Bid() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public abstract void fei();
public abstract void eat();
}
麻雀类:
package com.jr.date723.bid;
public class MaQue extends Bid{
public MaQue(String name) {
super(name);
}
public MaQue() {
}
@Override
public void fei() {
System.out.println("我是"+getName()+"我动作敏捷,飞的比火箭快");
}
@Override
public void eat() {
System.out.println("我不仅吃种子,也吃害虫!");
}
}
企鹅:
package com.jr.date723.bid;
public class QiE extends Bid{
public QiE(String name) {
super(name);
}
public QiE() {
}
public void yy(){
System.out.println("虽然我很胖,但我比鱼游得快");
}
@Override
public void fei() {
System.out.println("我是"+getName()+"企鹅QQ,我太胖了,所以不会飞");
}
@Override
public void eat() {
System.out.println("我喜欢吃鱼");
}
}
Test:
package com.jr.date723.bid;
public class Test {
public static void main(String[] args) {
MaQue maQue=new MaQue("麻雀嘟嘟");
maQue.fei();
maQue.eat();
System.out.println("****************************");
QiE qiE=new QiE("企鹅QQ");
qiE.fei();
qiE.eat();
qiE.yy();
}
}
例二:
汽车类:
package com.jr.date723.carzaoceshi;
public abstract class Car {
private String chepai;
private String chexing;
private String color;
private double rizujin;
public Car(String chepai, String chexing, String color, double rizujin) {
this.chepai = chepai;
this.chexing = chexing;
this.color = color;
this.rizujin = rizujin;
}
public Car() {
}
public String getChepai() {
return chepai;
}
public void setChepai(String chepai) {
this.chepai = chepai;
}
public String getChexing() {
return chexing;
}
public void setChexing(String chexing) {
this.chexing = chexing;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getRizujin() {
return rizujin;
}
public void setRizujin(int rizujin) {
this.rizujin = rizujin;
}
public abstract void zuli();
}
轿车类:
package com.jr.date723.carzaoceshi;
import java.util.Scanner;
public class JiaoChe extends Car{
public JiaoChe(String chepai, String chexing, String color, double rizujin) {
super(chepai, chexing, color, rizujin);
}
public JiaoChe() {
}
@Override
public void zuli() {
double zujin;
Scanner input=new Scanner(System.in);
System.out.println("请输入租车时间:");
int date=input.nextInt();
zujin=date*getRizujin();
System.out.println("租货信息:");
System.out.println("车牌:"+getChepai());
System.out.println("车型:"+getChexing());
System.out.println("颜色:"+getColor());
System.out.println("租车人:李四");
System.out.println("租金:"+zujin);
}
}
卡车类:
package com.jr.date723.carzaoceshi;
import java.util.Scanner;
public class KaChe extends Car{
private int zaizhongliang;
public KaChe(String chepai, String chexing, String color,int zaizhongliang,double rizujin) {
super(chepai, chexing, color, rizujin);
this.zaizhongliang = zaizhongliang;
}
public KaChe(int zaizhongliang) {
this.zaizhongliang = zaizhongliang;
}
public KaChe() {
}
public int getZaizhongliang() {
return zaizhongliang;
}
public void setZaizhongliang(int zaizhongliang) {
this.zaizhongliang = zaizhongliang;
}
@Override
public void zuli() {
double zujin;
Scanner input=new Scanner(System.in);
System.out.println("请输入租车时间:");
int date=input.nextInt();
zujin=date*getRizujin();
System.out.println("租货信息:");
System.out.println("车牌:"+getChepai());
System.out.println("车型:"+getChexing());
System.out.println("颜色:"+getColor());
System.out.println("载重量:"+getZaizhongliang());
System.out.println("租车人:张三");
System.out.println("租金:"+zujin);
}
}
Test类:
package com.jr.date723.carzaoceshi;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入租车人姓名:");
String name=input.next();
if (name.equals("张三")){
KaChe kaChe=new KaChe("京D1111","东风","蓝色",500,100.0);
kaChe.zuli();
}else if (name.equals("李四")){
JiaoChe jiaoChe=new JiaoChe("京R0000","奥迪","黑色",200.0);
jiaoChe.zuli();
}
}
}
暂时只上传这两个例子