java笔记目录

  • 一、类和对象
    • 1.1 static 使用之静态变量
    • 1.2 static 使用之静态方法
    • 1.3 static 使用之静态初始化块
  • 二、封装
    • 2.1 java 中的访问修饰符
    • 2.2 java中的 this关键字
    • 2.3 Java 中的内部类
  • 三、继承
    • 3.1 final 关键字使用。
    • 3.2 super 关键字使用
    • 3.3 Object 类
  • 四、多态
    • 4.1 对象的多种形态
    • 4.2 接口
    • 4.3 UML(统一建模语言或标准建模语言)

一、类和对象

1.1 static 使用之静态变量

大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立。然而在某些时候,我们更希望该类所有的对象共享同一个成员。此时就是 static 大显身手的时候了!!

Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问~~

使用 static 可以修饰变量、方法和代码块。

1.2 static 使用之静态方法

与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:


需要注意:

1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。

1.3 static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值。如:

在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。


通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

二、封装

将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的某些方法来实现对隐藏信息的操作和访问。

2.1 java 中的访问修饰符

2.2 java中的 this关键字

a、this关键字代表当前对象。
this.属性 操作当前对象的属性。
this.方法 调用当前对象的方法。
b、封装对象的属性的时候,经常会使用this关键字。

2.3 Java 中的内部类

问:什么是内部类呢?

答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!

答:内部类的主要作用如下:

  1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

  2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

  3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

问:内部类有几种呢?

答:内部类可分为以下几种:

成员内部类
静态内部类
方法内部类
匿名内部类

//外部类HelloWorld
public class HelloWorld {// 内部类Inner,类Inner在类HelloWorld的内部public class Inner {// 内部类的方法public void show() {System.out.println("welcome to imooc!");}}public static void main(String[] args) {// 创建外部类对象HelloWorld hello = new HelloWorld();// 创建内部类对象Inner i = hello.new Inner();// 调用内部类对象的方法i.show();}
}

java中的成员内部类


从上面的代码中我们可以看到,成员内部类的使用方法:

1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

另外

1、 外部类是不能直接使用内部类的成员和方法滴。
可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。

静态内部类

静态内部类是 static 修饰的内部类,这种内部类的特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();


方法内部类
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

三、继承

语法:class 子类 extends 父类
方法重写
返回值类型、方法名、参数类型以及个数都要与父类继承方法相同,才叫方法重写。
初始化(先父类----->子类)
构造方法初始化后执行

3.1 final 关键字使用。

3.2 super 关键字使用

在对象的内部使用,也可以代表父类对象。
1.访问父类的属性
super.age
2.访问父类的方法
super.eat()

3.3 Object 类

Object 类是所有类的父类。所有类默认继承Object类。
Object类中的方法,适合所有子类

  1. toString() 方法 返回对象的哈希code码(对象地址字符串)
  2. equals() 方法 比较的是对象的引用是否指向同一块内存地址。

四、多态

4.1 对象的多种形态

1.引用多态
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
2.方法多态
创建本类对象时,调用的方法为本类方法。
创建子类对象时,调用的方法为子类重写的方法或者继承的方法。

4.2 接口

一种特殊的类,由全局常量和公共的抽象方法所组成。

接口使用中经常与匿名内部类配合使用。
匿名内部类就是没有名字的内部类,
多用于关注实现而不关注实现类的名称。

4.3 UML(统一建模语言或标准建模语言)

是一个支持模型化和软件系统开发的图形化语言。
为软件开发的所有阶段提供模型化和可视化支持。
用例图
用例图能够可视化的方式,表达系统如何满足所收集的业务规则,以及特定的用户需求等信息
序列图
序列图用于按照交互发生的一系类顺序,显示对象之间的这些交互。

类图
UML 类图、业务逻辑和所有支持结构异同被用于定义全部的代码结构。

package com.imooc.practice;import java.util.*;//所有类型的车可以提取出车这个父类,包含车名、载人数、载货量、租金4个属性public abstract class Car {//使用封装概念,只能通过指定的方法读写属性private int rent; //日租金;private int personnum; //载人数;private int cargo; //载货量;private  String name; //车名;//使用set、get方法读写属性public int getRent() {return rent;}public void setRent(int rent) { this.rent = rent; }public int getPersonnum() { return personnum;}public void setPersonnum(int person) {this.personnum = person;}public int getCargo() {return cargo;}public void setCargo(int cargo) {this.cargo = cargo;}public String getName() {return name;}public void setName(String name) {this.name = name;}}//创建乘用车子类public class PassengerCar extends Car {public PassengerCar(String name, int personnum, int cargo, int rent) {this.setName(name);this.setPersonnum(personnum);this.setRent(rent);this.setCargo(cargo);}//重写toString方法返回乘用车车辆信息public String toString() {return this.getName()+"\t\t"+this.getPersonnum()+"\t\t"+this.getCargo()+"\t\t"+this.getRent();}}//创建货运车子类public class Truck extends Car {public Truck (String name, int personnum, int cargo, int rent) {this.setName(name);this.setPersonnum(personnum);this.setCargo(cargo);this.setRent(rent);}//重写toString方法返回货运车信息public String toString() {return this.getName()+"\t\t"+this.getPersonnum()+"\t\t"+this.getCargo()+"\t\t"+this.getRent();}}//创建皮卡子类public class Pickup extends Car {public Pickup(String name, int personnum, int cargo, int rent) {this.setName(name);this.setPersonnum(personnum);this.setCargo(cargo);this.setRent(rent);}//重写toString方法返回皮卡车信息public String toString() {return this.getName()+"\t\t"+this.getPersonnum()+"\t\t"+this.getCargo()+"\t\t"+this.getRent();}}public class DadaTestDrive {public static void main(String[] args) {// TODO Auto-generated method stub//对各类车实例化并保存到数组Car[] cars = {new PassengerCar("奥迪A4",4,0,500), new PassengerCar("马自达6",4,0,400), new Pickup("皮卡雪6",4,2,450), new PassengerCar("金龙",20,0,800), new Truck("松花江",0,4,400), new Truck("依维柯",0,20,1000)};//进入提示显示步骤System.out.println("欢迎使用达达租出系统!");System.out.println("***租车请按1,不租车请按2***");//读取用户键入的信息并判断Scanner input = new Scanner(System.in);int key = input.nextInt();if(key !=1) {System.out.println("期待您下次光临!");input.close();return;}else if(key == 1) {System.out.println("您可租的车型及价目表如下:");System.out.println("序号"+"\t车名"+"\t\t载人数(人)"+"\t载货量(吨)"+"\t租金(元/天)");//输出实例化的各类车for(int i=0; i<cars.length; i++) {System.out.println((i+1)+"\t"+cars[i]);}}//输入想租的车的数量System.out.println("请输入要租车的数量:");int carcount = input.nextInt();//更新车辆数组Car[] newCars = new Car[carcount];int totalRent = 0;int totalPerson = 0;int cargo = 0;for(int i=0; i<carcount; i++) {System.out.println("请输入第"+(i+1)+"辆车的序号");int serialNum = input.nextInt();newCars[i] = cars[serialNum-1];}System.out.println("请输入您想租车的天数:");int days = input.nextInt();//计算租金for(int i=0; i<carcount; i++) {totalRent += newCars[i].getRent()*days;}//输出账单System.out.println("您本次的租车账单:");System.out.print("\n");//列出所选乘用车并计算总的载人数System.out.println("已选载人车:");for(int i=0; i<carcount; i++) {if(newCars[i].getPersonnum() != 0) {System.out.println(newCars[i].getName());totalPerson += newCars[i].getPersonnum();}}System.out.print("\n");System.out.println("已选载货车:");//列出所选货运车并计算总的载货量for(int i=0; i<carcount;i++) {if(newCars[i].getCargo() != 0) {System.out.println(newCars[i].getName());cargo += newCars[i].getCargo();}}System.out.print("\n");System.out.println("共可载客"+totalPerson+"人");System.out.println("共可载货"+cargo+"吨");System.out.println("请付租金"+totalRent+"元");System.out.print("\n");System.out.print("谢谢惠顾,欢迎下次光临");input.close();}}

Java开发笔记(二)相关推荐

  1. (硅谷课堂项目)Java开发笔记4:前端基础知识(二)

    文章目录 (硅谷课堂项目)Java开发笔记4:前端基础知识(二) 一.NPM 1.NPM简介 1.1.什么是NPM 1.2.NPM工具的安装位置 2.使用npm管理项目 2.1.创建文件夹npm 2. ...

  2. Java开发笔记(二十三)数组工具Arrays

    数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...

  3. Java开发笔记(五十)几种开放性修饰符

    前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...

  4. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  5. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  6. 微信公众号Java开发-笔记02【开发接入准备、开发接入】

    学习视频网址:哔哩哔哩网站 微信公众号开发-Java版 [P01-P02]微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] [P03-P04]微信公众号Java开发-笔记02[开发接入 ...

  7. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】

    学习网址:哔哩哔哩网站 微信公众号开发-Java版 微信公众号Java开发-笔记01[微信公众号介绍.开发环境搭建] 微信公众号Java开发-笔记02[] 微信公众号Java开发-笔记03[] 微信公 ...

  8. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  9. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

  10. Java开发笔记(一百零三)线程间的通信方式

    前面介绍了多线程并发之时的资源抢占情况,以及利用同步.加锁.信号量等机制解决资源冲突问题,不过这些机制只适合同一资源的共享分配,并未涉及到某件事由的前因后果.日常生活中,经常存在两个前后关联的事务,像 ...

最新文章

  1. python课程是学什么的-学习Python课程有什么好的学习方法吗?老男孩IT教育
  2. [简单题]换一个思维,代码简洁度就完全变了(Python实现)
  3. python3(七)os模块
  4. 通过JAX-WS Provider在Web服务中利用MOXy
  5. 如何保证redis高可用?薪资翻倍
  6. JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)
  7. 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」
  8. [Xpand] Error 1 Invalid option '6' for /langversion; must be ISO-1, ISO-2, 3, 4, 5 or Default
  9. 硬盘变成raw格式的问题的解决方法
  10. android 崩溃捕获_Android从相机和图库捕获图像
  11. LNMP架构 源码安装nginx+mysql+php+memcache+论坛
  12. wxpython安装不上怎么回事_安装Python - wxPython失败的解决方法
  13. 蓝牙耳机出口欧盟要做什么CE的哪些指令?
  14. 开源电子海图和webGIS
  15. Matlab-数值计算方法作业
  16. VS2019项目自动包含bin或obj文件夹的问题
  17. 电驴怎么显示服务器列表,(转)如何更新电驴服务器列表(eMule Server List)
  18. 二.微信小程序代码的构成
  19. 今日学习在线编程题:弓形半径
  20. Mac老是自动关掉屏幕怎么办?

热门文章

  1. cut切割,简单的取列
  2. Zjh游戏(十九)跟注的处理
  3. 社保可以这么报销?现在知道还不晚!
  4. 如何看待优秀的山东电视台
  5. 计算机发展史-计算机基础知识总结(下)
  6. IMU误差模型简介及VINS使用说明
  7. tcp checksum incorrect_TCP/IP这门技术有什么用?
  8. 顺序二叉树(堆)与链式二叉树的C语言实现
  9. SAP应用中移动类型和移动原因的理解
  10. 谁说菜鸟不会数据分析pythonpdf下载_谁说菜鸟不会数据分析(Python篇)