30天学会java基础

30天学会java基础Day01 04 一 数据类型和变量 语法 数据类型 标识符 变量值 数据类型 1 个字节占 8 位 第一个为高位 后面七个为低位 数组 Array 数组是一种引用类型 可以一次性存储多个值

大家好,我是讯享网,很高兴认识大家。



Day01~04

一、 数据类型和变量

 
讯享网 

语法: 数据类型 标识符 = 变量值;

讯享网

数据类型:

1个字节占8位:第一个为高位,后面七个为低位;

 

数组(Array):

数组是一种引用类型,可以一次性存储多个值,是一块连续的物理空间,且必须有相同的数据类型,且长度固定;

数组通过下表进行访问,数组是引用类型,在堆开辟空间;

数组在堆区分配——eg:图书馆的书架;

一维数组:

讯享网

多维数组:

 

java垃圾回算法:

  1. 标记-清除算法:这是最简单的垃圾回收算法,它通过标记不再使用的对象,然后清除它们占用的内存。该算法存在内存碎片问题,因为被清除的对象所占用的空间不能被重用,从而导致内存浪费。
  2. 复制算法:这种算法将可用内存划分为两个区域,一次只使用其中一个。当一个区域用完时,垃圾回收器会将所有存活的对象从该区域复制到另一个区域中,然后清除原始区域中不再使用的对象。该算法可以解决内存碎片问题,但需要更多的内存用于复制存活对象。
  3. 标记-整理算法:这种算法与标记-清除算法类似,但在标记不再使用的对象后,它会将所有存活对象移到一端,然后清除剩余空间。该算法可以避免内存碎片问题,但需要更多的时间进行整理。
  4. 分代算法:该算法将内存分为几个代,每个代使用不同的垃圾回收算法。新创建的对象被放置在第一代中,一段时间后,如果它们仍然存活,则将它们移动到第二代中。如果它们在第二代中存活一段时间,它们将被移动到第三代中。在每个代中,不同的算法被使用,以优化垃圾回收效率。

    5.增量式垃圾回收算法:该算法将垃圾回收过程分解成若干小步骤,在每个步骤中只处理一小部分对象,同时允许程 序继续运行。该算法可以减少暂停时间,但需要更多的垃圾回收器代码。

运算符号优先级:

二 、循环和选择

给10位同学的成绩进行分级(0~60为不及格,60~80为及格,80~100为优秀)

 
 

求3*3的二维数组中的最大最小值:

 

三、 课后作业:

1.编写一个控制台版本的九九乘法表;

 

2.编写函数实现求最大值、最小值和平均值;

 
 

3.编圆类,实现求面积、体积和周长;

 

4.编写冒泡排序法,编写快排序法:

 
 

5.编写一个贪吃蛇游戏(swing界面),俄罗斯方块,坦克大战;

 

6.编写一个聊天室:

 

7.实现加减乘除:30天学会java基础

 
 

Day 05

一、 函数的定义:

函数定义的位置:在一个类的内部,其他函数的外部,与其他函数并列,不能进行嵌套;

 

函数的调用:

 
 

重载:在一个类内部,多个函数的名称相同,但参数列表不同的称为重载;

 

Day 06~09

一、 类和对象

1、 对象:

1.什么是面向对象(java)? 面向对象(Object Oriented)是软件开发方法,一种编程范式。它以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计结果与客观世界的实际比较解决。

2.什么是面向过程(c)?

面向过程——》面向对象——》面向函数式

2、类:

类的定义:具有相同属性和行为的对象称为类;

3、 类和对象的关系:

类是对象的抽象,对象是类的实例 简历模板 张三的简历

 

成员变量(全局变量):在同一个类中,在函数外面的变量,类中每一个函数都能够使用;

局部变量:在函数内定义的变量,之内在函数内使用;

实例化:把抽象的变成实际的(用new开辟一个空间);

4、类和类之间的关系:

1. 泛化(Generalization)继承

【泛化关系】:是一种继承关系, 表示一般与特殊的关系, 它指定了子类如何特化父类的所有特征和行为. 例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。

 

2. 实现(Realization)

【实现关系】:是一种类与接口的关系, 表示类是接口所有特征和行为的实现.

 

3. 关联(Association)

【关联关系】:是一种拥有的关系, 它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。

【代码体现】:成员变量。

 

4.聚合(Aggregation)

【聚合关系】:是整体与部分的关系, 且部分可以离开整体而单独存在. 如车和轮胎是整体和部分的关系, 轮胎离开车仍然可以存在. 聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量。

 

5.组合(Composition)

【组合关系】:是整体与部分的关系, 但部分不能离开整体而单独存在. 如公司和部门是整体和部分的关系, 没有公司就不存在部门.组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期

【代码体现】:成员变量。

 

6. 依赖(Dependency)

【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.

【代码表现】:局部变量、方法的参数或者对静态方法的调用。

 

5、 构造方法:

1.定义:在一个类中,跟类名相同,但没有返回值的函数称为构造函数,也叫构造方法。(调用时使用new开辟一个空间)

 

2.构造函数有什么用:构造函数在实例化new的时候自动调用,且只调用一次,可以在构造函数中,对成员变量进行初始化;

儿子一定会调用父亲无参的构造函数(如果父亲没有有参的调用不了);

 

6、 练习(类和类之间的关系):

在 LoL 游戏中,英雄可以去武器商店购买武器,一个英雄可以携带左右两把武器,英雄可以通过武器物理攻击怪物,也可以通过魔法技能攻击怪物,一个英雄通常有四种技能,当键盘输入 Q 、 W 、 E 、 R 的时候分别释放四种技能,否则就是物理攻击(左右两把武器各攻击一下)。请根据 OOP 思想,编写和设计相关类和方法。

 

7、 面向对象的特征

1. 封装:封装是面向对象编程的核心思想,简单点说就是,我把某些东西封装起来,这些关键的核心的东西不能给你看,但是我可以提供给你一些简单使用的方法。(保护属性,隐藏实现的细节,对外提供可以公开的方法的过程)

封装其实是对外隐藏复杂细节,提供简单易用的接口,便于外界调用,从而提高系统的可扩展性、可维护性。在Java中这种隐藏或公开是通过权限修饰符来实现的。

 

  • 通过封装,我们可以保护代码被破坏,提高数据安全性。

    使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑限制对属性的不合理操作。

  • 通过封装,我们提高了代码的复用性(有些方法、类在很多地方都能多次反复使用)
  • 通过封装,带来的高内聚和低耦合,使用不同对象、不同模块之间能更好的协同,同时便于修改,增强代码的可维护性
  • 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
  • 低耦合 :仅对外暴露少量的方法用于使用
 

2. 继承:类和类之间有些也会具有一定的关系。比方说四边形,可以分为正方形、长方形、菱形,他们不但继承了四边形的特征,也具有属于自己的特征,这就是一种继承的关系。

继承原有的功能,增加自己新的功能,实现了拓展和复用。

java规定类只能继承一个类,但是一个类可以被多个类继承(一个子类只能有一个直接父类,一个父类可以有多个子类),类之间可以有多层的继承关系,直接继承的是直接父类,父类的父类就是间接父类,而最上层就是Object。

使用继承时,需要注意继承是受权限修饰符影响的。

  • 子类无法继承 private 修饰的属性和方法
  • 子类和父类在同一包下,可以继承 default 权限的属性方法
  • 子类可以对父类进行扩展,拥有自己的属性和方法
  • 子类可以重写父类的方法(前提是可以继承到这个方法)(多态的体现)

3. 多态:多态指同一个实体同时具有多种形式。同字面意思,即一个对象在不同的情况下会有不同的体现。(主要体现在对象和方法上,在子父类中不要定义同名的属性)

 

Day 10~11

一、接口:

接口定义用interface,使用用implems 接口内所有方法都是抽象的 接口中的所有属性都是静态的 接口可以继承接口 java不允许多继承,但允许多接口;

 
 
 

二、面向对象的设计原则:

1. 单一职责原则(SRP):

每个类应该只负责一项职责,这样可以使类具有高内聚。同时,每个类应该尽可能少地依赖于其他类,这样可以使类之间的耦合度降低。

 

在上面的代码中,Car 类只负责表示汽车的名称和颜色,而 CarSerializer 类只负责将 Car 对象序列化为字典。这样,每个类都只有一个职责,使得代码更加可维护和可重用。

2. 开放封闭原则(OCP):

 

在上面的代码中,CarSerializer 类是一个抽象类,它定义了 serialize 方法,用于将 Car 对象序列化为字典。CarXMLSerializer 类继承自 CarSerializer 类,并重写了 serialize 方法,用于将 Car 对象序列化为 XML。这样,当需要添加新的序列化格式时,只需要创建一个新的子类,而不需要修改现有代码。

3. 里氏替换原则(LSP):

 

在上面的代码中,ElectricCar 类继承自 Car 类,并添加了一个新的属性 batterylife 和一个新的方法 getbatterylife。然而,ElectricCar 类的实例可以替换 Car 类的实例,并且可以在 printcar_info 函数中正常工作,因为它遵循了 Car 类的约束和行为。

4. 接口隔离原则(ISP):

将接口分离成更小的和更具体的接口,以便客户端只需要实现它们需要的接口,这样可以使类之间的耦合度降低。

 

在上面的代码中,CarColor 类定义了一个 getcolor 方法,用于获取汽车的颜色。RedCar 类和 BlueCar 类都继承自 Car 类和 CarColor 类,并实现了 getcolor 方法。printcarinfo 函数检查传入的对象是否是 CarColor 类型的实例,如果是,则打印汽车的颜色。这样,客户端只需要实现它们需要的接口,而不需要依赖于它们不需要的接口。

5. 依赖倒置原则(DIP):

高层模块不应该依赖于低层模块,它们应该依赖于抽象。这样可以使类之间的耦合度降低。

 

在上面的代码中,CarSerializer 类依赖于 Car 类,但是它依赖于 Car 类的抽象而不是具体的实现。CarSerializer 类的构造函数接受一个 Car 对象,并将其存储在实例变量中。serialize 方法使用存储的 Car 对象来生成序列化的字典。这样,CarSerializer 类不依赖于具体的 Car 类实现,而是依赖于 Car 类的抽象。

最准目标:高内聚,低耦合:

高内聚和低耦合是软件设计中的两个重要概念,它们有助于编写可维护、可扩展和可重用的代码。 高内聚指的是一个模块或类的内部元素之间的联系紧密程度。具有高内聚的模块或类通常具有单一的职责,并且其内部元素之间的联系紧密,这使得模块或类更加可维护和可重用。例如,一个负责处理订单的类应该只包含与订单相关的方法和属性,而不应该包含与其他功能无关的方法和属性。 低耦合指的是模块或类之间的联系松散程度。具有低耦合的模块或类之间的依赖关系较少,这使得模块或类更加灵活和可扩展。例如,一个负责处理订单的类应该只依赖于与订单相关的类,而不应该依赖于与其他功能无关的类。

Day 12~13

1、静态(Static)

使用方法:

 

静态在使用时不需要去new

 

静态块在类加载时首先会自动运行(只运行一次);

 

练习1:

编写一个圆类,实现能够计算周长和面积,要求半径当作参数传入;

 
 

2、内部类

 

内部类可以直接使用外部类的成员变量;

 

3、字符串

作业:

1.给定一个网址,求协议,求域名,求项目名,求资源名https://localhost:8080/project/idex.html

https://localhost:8080/project/idex.html https://localhost:8080/project/login.html

 

2.给定一个字符串,包含了属性和值,请解析存储到数组中

name=张三,age=25,email=,address=“内蒙古” name=李四,age=30,email=,address=“北京”

 

1.字符串的不可变性

在Java中,字符串是不可变的,这意味着一旦创建了一个字符串对象,就不能更改它的值。这是因为Java中的字符串是通过String类来表示的,而String类是final的,不能被继承或修改。

 
 

这是因为字符串是不可变的,我们无法直接修改字符串对象的值。如果我们需要修改字符串,可以使用StringBuilder或StringBuffer类,例如:

 

在这个例子中,我们首先创建了一个可变的字符串对象StringBuilder,并将其初始化为"Hello"。然后,我们使用setCharAt方法修改了字符串的第一个字符,最后将StringBuilder对象转换为不可变的字符串对象,赋值给变量str。

2.可变字符串

在Java中,可变字符串是指可以修改其值的字符串对象。Java提供了两个类来表示可变字符串:StringBuilder和StringBuffer。

StringBuilder和StringBuffer类的用法非常类似,它们都提供了一些方法来修改字符串的值,例如添加、插入、删除、替换等操作。与不可变字符串不同的是,这些操作会直接修改原始的字符串对象,而不是创建新的字符串对象。

StringBuilder和StringBuffer的主要区别在于线程安全性。StringBuilder是非线程安全的,适用于单线程环境下的字符串操作;而StringBuffer是线程安全的,适用于多线程环境下的字符串操作。由于StringBuffer需要进行同步操作,因此在单线程环境下,StringBuilder的性能要优于StringBuffer。

以下是一个使用StringBuilder类的例子,展示了可变字符串的特点:

 

在这个例子中,我们首先创建了一个可变字符串对象StringBuilder,并将其初始化为"Hello"。然后,我们使用append方法在字符串末尾添加了一个空格和"World",使用insert方法在字符串的第五个字符位置插入了一个逗号,使用deleteCharAt方法删除了字符串的第一个字符。最后,我们将StringBuilder对象转换为不可变的字符串对象,赋值给变量str。注意,这些操作都是直接修改原始的字符串对象,而不是创建新的字符串对象。

面向对象程序作品:坦克大战游戏

小讯
上一篇 2025-01-01 09:31
下一篇 2024-12-31 11:36

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/10199.html