2021年07月14日 随堂笔记

习题讲解

求最大公约数
int i;
for(i=n;i>0;i–){
if(m%i==0&&n%i==0)
break;
}

回文数

颠倒这个数,如果和原来的数一样的话,那么就是回文数。

1
2
3
4
5
6
7
8
9
10
11
m=12321;
n=m;
s=0;
while(n>0){
s=s*10+n%10
n=n/10;
}

if(s==m){
// 回文数
}

11题 2+22+222+2222+22222

1
2
3
4
5
6
7
8
9
10
11
n=5;
a=2;
s=0;
sn=0;

for(int i=0;;i<n;i++)
{
sn=sn*10+a;
s=s+sn;
}
输出s

面向对象

结构体

1
2
3
4
5
struct book{
double 价格;
char[20] 作者;
char[100] 出版社;
}

定义结构体变量:

1
struct book m;

取别名

1
2
3
4
5
typedef struct book{
double 价格;
char[20] 作者;
char[100] 出版社;
} Book;

类 = 结构体 + 函数
| |
属性 方法

面型对象的特征

  • 封装
  • 继承
  • 多态

继承是为了更好的实现软件复用

在面试的时候,一定要举例子说明。

多态

重载

同一个类里面有多个同名方法,—->见名知意

1
2
int max(int x,int y)
double max(double x,double y)

重写

在继承的情况下。

高内聚 松耦合

模块之内要高内聚,模块之间要松耦合。

类之内要高内聚,类之间要松耦合。

添加新功能,应该封装实现

对别人的功能上添加新功能,不要重写,要包装别人的类,如果有问题那么就是原来的类的问题,责任不在自己

类的声明和类体

java命令规则

类的名字不能是java中的关键字,要符合标识符规定

标识符规定

标识符可以由字母,下划线,数字或美元符号组成,并且第一个字符不能是数字
a$是合法的(日常使用中应避免使用美元符号作为标识符)

类的成员属性

属性写在类的前面,方法写在后面

类的成员方法

方法的名字必须符合标识符规范,
首字母小写,其他单词首字母要大写。

构造方法

构造方法的名字必须和类名相同,并且不能写返回值类型。
如果写了返回值类型,那么该方法就不在是构造方法,而是普通方法。

new出来的空间都在堆,其他的都在栈空间。

this指针

编译器会在调用每个对象的时候,写到方法的形参里面。
picgo-plugin-gitee-uploader

就近原则

优先使用最近的同名变量

编程题 求两点之间的距离

new是申请空间,构造函数是初始化

编程题 写一个圆Circle类

给定圆心和半径

求周长,面积,位置的关系,相离,相切,相交。

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
41
42
43
44
45
46
47
48
49
50
51
52
53
public class Circle {
// 圆心
private Point center;
// 半径
private double radius;

public Circle() {
// TODO Auto-generated constructor stub
}

public Circle(Point center, double radius) {
super();
this.center = center;
this.radius = radius;
}

/**
* 求圆的周长
*
* @return 圆的周长
*/
public double perimeter() {
return 2 * Math.PI * radius;
}

/**
* 求圆的面积
*
* @return 圆的面积
*/
public double area() {
return Math.PI * radius * radius;
}

/**
* 判断两个圆的位置关系
*
* @param other 另一个圆
* @return 如果两个圆相离,则返回1;
* 如果两个圆相交,则返回0;
* 如果两个圆相切则返回-1。
*/
public int position(Circle other) {
// 如果两个圆的圆心的距离大于半径
double radiusSum = this.radius + other.radius;
if (this.center.distance(other.center) > radiusSum)
return 1;
else if (Math.abs(this.center.distance(other.center) - radiusSum) < 1e-6) {
return 0;
}
return -1;
}
}

写方法时,参数越少越好。

如果一个类之中没有写构造函数,编译器会给这个类写上一个默认的构造函数。

如果你已经在类之中写了构造函数,则编译器不会提供默认的构造函数。

空的类系统依然会分配内存,通常是一个字节

编程题 复数的加减法

a+bi

复数的运算法则

https://baike.baidu.com/item/%E5%A4%8D%E6%95%B0/254365#5

image-20210714150942916

常量

final定义的变量就是常量。

1
public final in MAX=99;

常量不能被重新赋值。

构造函数中给常量赋值

常量可以先声明,然后在构造函数中赋值。

1
2
3
4
5
6
public class Demo{
public final int MAX;
public Demo(){
this.MAX=2;
}
}

注意,只能在构造函数中赋值,不能在其他方法中给常量赋值。

static

类中的常量应该使用static修饰,不然的话每个对象都存储一遍常量会浪费内存。

JDK7以上版本,静态域存储于定义类型的Class对象中

static定义的成员,应该使用类名来调用,不要用this来调用

static定义的方法,编译器不会给static方法增加this形参,所以这个static方法不能去访问对象。

如果确实要在static方法中访问对象,可以自己在形参列表中传入该对象的引用。

静态方法只能访问静态的成员变量和成员方法

编程题 定义一个类,要求该类知道创建了多少该类的对象

使用static定义一个计数器,然后在构造函数中给计数器加一

单例模式

  • 先要隐藏构造函数,类的构造函数私有化。
  • 提供一个静态的公共方法给别人获取对象。
  • 在类中,要记下已经创建好的对象。

代码块

如果在类之中的成员变量,在定义时赋值,在代码块中赋值,在构造器中赋值。

执行顺序为:

直接赋值,代码块,构造函数

如果有多个代码块,多个代码块之间按定义大的顺序执行。

静态代码块只会执行一次

静态代码块在.class文件加载到内存中就运行了,因为类只会加载一次,所以静态代码块也就只会执行一次