MySQL学习记录

今日任务

完成对MYSQL数据库的多表查询及建表的操作

教学目标

掌握MYSQL中多表的创建及多表的查询

掌握MYSQL中的表关系分析并能正确建表

阅读更多

浅谈java多态

一、前言

这篇讲下三大特性之一的多态,可以通俗得去理解,多种形态,多种姿态。。。

那么在面向对象的程序设计中,多态是 指什么?

Java引用变量有两个类型;一个是编译类型,一个是运行时类型。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定.如果编译类型和运行时类型不一致,就可能出现所谓的多态(Polymorphism)

“多形性”(Polymorphism)从另一个角度将接口从具体的实施细节中分离出来,亦即实现了“是什么”与“怎样做”两个模块的分离。利用多形性的概念,代码的组织以及可读性均能获得改善。此外,还能创建“易于扩展”的程序。无论在项目的创建过程中,还是在需要加入新特性的时候,它们都可以方便地“成长”。——ThinkinJava

直接网易百科-Polymorphism

二、发生的条件

  • 继承。多态发生一定要子类和父类之间。
  • 覆盖。子类覆盖父类的方法
  • 声明的变量类型是父类,但是实际指向的是子类。程序中的new后面就是子类
1
2
//f4变量是子类类型,指向子类实例
Triangle f4 = new Triangle();

三、多态包含(或者说体现在)两个方面:

  1. 首先是同一个方法,不同的实现效果,就具体的方法是怎么实现的,是可以不同的。就是方法的多态性

    1
    吃苹果方法,可以剥皮吃,也可以不剥皮吃,甚至是榨苹果汁喝。

    规范讲这种就是可以通过重载和覆写来实现

    • 重载:同一个方法名称,因为不同的参数类型和个数,因此可以达到不同的效果。
    • 覆写:同一个方法,根据实例化的子类对象不同,最后的效果和实现功能不一样。
  2. 对象的多态性

    引用类型转换也是通过小括号运算符实现,类型转换有两个方向:将父类引用类型

    变量转换为子类类型,这种转换称为向下转型(downcast);将子类引用类型变量转换为

    父类类型,这种转换称为向上转型(upcast)。向下转型需要强制转换,而向上转型是自

    动的。

    • 向上转型:子类对象变为父类
    • 向下转型:父类对象变为子类

四、示例

  • 简单的示例多态,代码里面的@Override是伪代码,表示方法重写。一般你重写正确了,IDE会自动加上去的。也是一种验证方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package music.daima.ebook;
class Figure{
//绘制几何图形方法
public void onDraw() {
System.out.println("绘制Figure...");
}
}
class Ellipse extends Figure{
@Override
public void onDraw() {
System.out.println("绘制椭圆形");
}
}
class Triangle extends Figure {
// 绘制几何图形方法
@Override
public void onDraw() {
System.out.println("绘制三角形...");
} }
public class PolymorphismEasy {
public static void main(String[] args) {
// f1变量是父类类型,指向父类实例
Figure f1 = new Figure();
f1.onDraw();
//f2变量是父类类型,指向子类实例,发生多态
Figure f2 = new Triangle();
f2.onDraw();
//f3变量是父类类型,指向子类实例,发生多态
Figure f3 = new Ellipse();
f3.onDraw();
//f4变量是子类类型,指向子类实例
Triangle f4 = new Triangle( );
f4.onDraw();
}
}
//output:
绘制Figure...
绘制三角形...
绘制椭圆形
绘制三角形...
  • 不能覆盖private方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package music.daima.ebook;

public class PolymorphismFugai {
private void p(){//if public...就可以覆盖
System.out.println("1");
}
public static void main(String[] args) {
PolymorphismFugai s = new jicheng();
s.p();//将输出的是上面的1而不是我们想要的jicheng类中的方法
}
}

class jicheng extends PolymorphismFugai{
public void p(){
System.out.println("2");
}
}
//output:1
  • Static静态方法与多态的关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package music.daima.ebook;
//这一篇是用来研究静态方法与多态的
class A {
public static String get(){//定义一个方法
return "A is base";
}
}
//继承A
class B extends A {
public static String get(){//同样的方法
return "B is not base";
}
}
public class StaticUpcast {
public static void main(String[] args) {
A a = new B();//upcast 向上转型
System.out.println(a.get());

}

}
//output:
//A is base
//从这里发现静态方法是与类相关联的,不是与单个对象关联的,不能覆盖掉

感谢阅读

才疏学浅,有不对的地方欢迎指教!

随记笔记

  1. 在重写继承的时候,子类的权限不能比父类低

  2. 类对接口的实现,其实体现了多态性,因为类需要重写接口中所有的抽象方法。

  3. 构造函数:特殊类型的方法,没有返回值,与void的普通方法不一样,

  4. 归并排序:稳定,时间复杂度 O(nlog n)

    快速排序:不稳定,时间复杂度 最理想 O(nlogn) 最差时间O(n^2)

    堆排序:不稳定,时间复杂度 O(nlog n)

    归并排序时间复杂度 O(n),消耗空间最多。

  5. 比特成帧,帧成报文,报文成包,包成段(物理层,数据链路层,网络层,传输层的单位)

  6. IP地址分类

    A:0.0.0.0~127.255.255.255

    B:128.0.0.0~191.255.255.255

    C:192.0.0.0~223.255.255.255

  7. ARP协议(Address Resolution Protocol,地址解析协议),属于IPv4协议簇,工作在数据链路层。其功能是将IP地址解析为对应的MAC地址。
    
    RARP协议(Reverse ARP,反向ARP协议),其功能是将MAC地址解析为对应的IP地址。
    
  8. JDK1.8后,接口中可以有静态方法,静态方法必须有方法体。

  9. Java中可以接受抽象类、类与接口对象作为方法的参数

  10. 三步走学习方法-分散知识点学习、刻意训练、寻求反馈

  11. 做题法:读题、用尽所有想法、尝试解答、查看答案、套用多个条件、更换不同测试用例。

  12. 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。   Java中的Iterator功能比较简单,并且只能单向移动:   (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。   (2) 使用next()获得序列中的下一个元素。   (3) 使用hasNext()检查序列中是否还有元素。   (4) 使用remove()将迭代器新返回的元素删除。   Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

tomcat记录

解决tomcat中文控制台乱码输出

乱码情况

解决后

解决方法

找到你的电脑上tomcat文件夹下的conf配置文件中的logging.properties–用来配置tomcat的日志输出方式,这里表示文件输出和控制台输出

里面很多输出都是默认设置UTF-8的编码,找到logging.Console…那一行修改即可,想要正常中文的就将其修改为GBK编码。

最后

其实还有设置电脑注册表配置来解决,网上也都有,大家可以自行参考。

浅谈java中的Collection

谈谈Collection

前言

这一篇讲的collection接口;首先,集合是用来存储数据的,它是基于某种数据结构数据容器。常见的数据结构:数组(Array)、集(Set)、队列(Queue)、链表(Linkedlist)、树(Tree)、堆(Heap)、栈(Stack)和映射(Map)等结构。集合大类分为了Collection和Map如下图

阅读更多

算法笔记

笔记

所谓算法,基于特定的计算模型,旨在解决某一种信息处理问题而设计的一个指令序列

需要具备的条件

正确性、有序性、可行性、重用性、确定性,同时还有输入输出。

阅读更多

复杂度

参考网站

前言

常常分析一段代码的好坏,程序员来说,先判断其正确与否,再者,看效率,即包括运行时候的效率等,常常便看到O(n)等字眼,大O符号,其实就是在分析复杂度,包括时间复杂度和空间复杂度。

计算机科学有一种专门用来测量算法最坏情况的速记法,即所谓的“大O”符号。

大O符号的目的不是使用分钟和秒钟来表示算法的性能,而是方便我们讨论问题规模和程序运行时间之间的关系。由于大O符号故意剔除了细枝末节的内容,所以展示在我们眼前的是将问题分成不同大类的概略情况。

——《算法之美》

需要注意的是这个大O表示的是个大概整体的情况,并非真实的速度之类的,一个程序的运行总时间主要包括

  1. 执行每条语句的耗时;
  2. 执行每条有的频率;

简介

计算

  • 补充一些数学知识

image.png

  • 常用常见的大小比较公式

image.png

英语记录

英语积累

前言

这一篇blog是记录自己在学习过程中遇到的一些英文单词,特别是频率较高的。

  • 在linux上的
单词 翻译
synopsis 概要、大纲
mount 直译是组织安排,用来挂载Linux外的文件
  • Java上的
单词 翻译
subsequent 参数
allocate 分配
surrogate 替代的
radix 基数、根值
pattern 模式,方法
cache 隐藏物,储存物
delimiter 定界符
invocation 调用
semicolons 分号