程序设计基础·Java学习笔记·面向对象(上)
Java程序设计基础之面向对象(上)
(自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ)
(新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ)
目录
一、面向对象
(一)面向对象程序设计(Object Oriented Programming,OOP)
(二)包与类(package & class)
(三)对象、方法与属性(Object & Methods & Properties)
(四)方法(Method)
(五)构造器(Constructor)
一、面向对象
(一)面向对象程序设计(Object Oriented Programming,OOP)
1.在Java中,程序由面向对象为核心进行设计,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。 对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。 在面向对象的程序设计中,对象是组成程序的基本模块。
2.理解:在Java中。如果要实现一个方法,那么首先,我们需要回答一些问题。1、这个方法所要做的事情是什么;2、这个方法的对象是谁;
根据这两个问题,我们就拥有了创建一个方法最基础的两个元素:对象与成员方法,对象是指方法的实例化,即在一个具体的项目事件中的“谁”的问题,回答的就是问题2。除此之外【成员方法】也叫方法,回答的是“所作的事情是什么?”
此外,在日常生活中的问题,我们通常是一群人做一些事情,那么我们“一群人”就是一个“类”,在这个类中,我们会拥有一些相同的特征,这个相同特征我们就称之为“属性”,也就是【成员变量】,而我们所作的事情,做事情的方法,在Java中我们用【成员方法】进行定义。而理解了“谁”在“做什么”,我们也就明白了面向对象的基本原理,也就是面向对象程序设计。
3.面向对象的三个特性:封装、继承、多态(在下文中会具体谈到)
(二)包与类(package & class)
1.理解:Java中,可以用包对类进行分类存储。包与类的形式类似于我们日常使用文件的文件夹的形式,文件 = 类,文件夹 = 包;
2.包名:包名一律用小写完成,如果多个单词则直接连接,如:methodloading、methodcall;
3.类名:类名一般除了每个单词外都用小写完成,单词首字母用大写,如果多个单词则直接连接,如:MethodLoading、MethodCall;
4.包的使用:
包:包中可以继续创建包,构成包的叠加,表示方法:package01.package02.package03……使用小数点进行连接;
引包:包的调用,需要用到关键词import,如果要调用包的所有文件,则使用 * ;即:
import package01;
import package01.package02;
import package01.*;
第二种引包的方式:在实例化时,实例化对象中加入包名,即可完成调用,即:
package01.getAge a = new package01.getAge;
5.类的使用:
类的写法:修饰词 class 类名{ };
类的修饰词:abstract final private public; (暂时还没学到,先不做记录,插个眼罢)
类的关键词:extends关键词,通过extends可以将两个类进行父子类的定义,即将extends前类定义为extends后类的子类
(三)对象、方法与属性(Object & Methods & Properties)
1.对象:前文说到,对象在Java中是方法的实例化,定义一个新对象,就能对方法进行执行、调用等一系列的操作。换而言之,如果要使用调用方法,则一定要实例化对象。毕竟,只是有模板还不够,要实现具体的东西,仍然要往树丫上填上绿叶与红花。
2.方法:在Java中,我们会把要做的事情放入方法中,然后把这个方法进行【封装】,当下一次要用到时,可以进行调用或是【继承】。
3.属性:除了方法以外,我们的每一个对象都会有不同的属性,这些属性在很大部分中可能都是重复的,这个时候我们所准备的属性就可以重复进行调用,节约很多的内存冗余。这种【继承】的思想,也是Java面向对象中的重要思想。
Example01.有一个代表着人类的Person类,他的属性有name名字、age年龄、sex性别等,他也有方法可以打印name、age、sex;此时,我们有一个新的类Student,他自然也需要属性name名字、age年龄、sex性别等,这时,我们就可以从Person类中直接调用这些属性,当然,也可以调用Person类中的方法。
4.属性的写法:修饰词 类型 属性名;(可以赋值,也可以不赋值。当不赋值时,会自动生成一个为0、null、false……的值)
修饰词:由大到小依次为public protected default(缺省) private
//修饰词所能使用的范围:
| 修饰词 | 类 | 包 | 子类 | 任何地方 |
| private | √ | |||
| default | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
5.方法的写法:修饰词 返回值 方法名( ){ }
static:静态方法只能调用静态变量与静态方法;
返回值:当返回值为void的时候,方法内不需要写返回值,此时表示返回0;当返回值为一个确定的类型时,如String、double等,需要手动添加返回值return,返回值必须与确定的类型相同。
小括号:小括号中是可以加变量的,此时加入进去的变量被称为形参,形参进行书写时,格式是(数据类型 形参名),同时如果不需要形参时,括号可以为空但不能不写。
大括号:大括号中的内容就是方法的具体内容;
6.对象的实例化:类名 对象名称 = new 类名();
实例化时,前后类名可以不进行对应,此时情况为前后类为父子类。前类为父类,后类为子类。此时如果进行调用,那么调用的如果时成员变量,不能调用子类中的成员变量,只能在父类的成员变量中进行调用(一个引用类型变量如果声明为父类的类型,但实际引用的是子类的对象,那么该变量就不能再访问子类中添加的属性和方法。)。如果此时调用的成员方法,那么调用的方法是子类中的方法而不是父类,也就是后类的方法。
(四)方法(Method)
1.方法也称成员方法,他类似于函数,用于描述对象的行为;
2.方法的调用:图解(还没画)JVM模型
3.方法的可变个数的参数:
方法一:数组
我们定义一个数组,通过往数组中添加成员变量来完成可变个数的参数的记录
public class Person {
public void printInfo(String[] args){
for(int i = 0 ; i < args.length ; i++){
System.out.println(args[i]);
}
}
}
public static void main(String[] args) {
Person p = new Person();
//通过数组定义,输入字符串数组args,实现方法的可变个数的参数
String[] x = new String[]{"Tom","10","男"} ;
p.printInfo(x);
//如若进行新参数的定义,则进行新数组的定义即可实现
String[] y = new String[]{"北京省xxx","13100225588","530225312052552"} ;
p.printInfo(y);
}
方法二:Java特定的迭代方式
我们通过特定的方式“...”来对参数实现可变个数的记录
public class Person {
public void printInfoo(String... args){
for(int i = 0 ; i <args.length ; i++){
System.out.println(args[i]);
}
}
}
public static void main(String[] args) {
p.printInfoo("张三","18","女","云南省xxx","18055663322","568759522568555");
}
4.方法的重载:Java中,允许在一个程序中定义多个名称相同,但是参数的类型或个数不同的方法,这就是方法的重载
public class test03 {
//方法的重载
public void mOL (int x){
System.out.println("x="+(x*x));
}
public void mOL(int x,int y){
System.out.println("x="+(x*x+y*y));
}
public void mOL(String x){
System.out.println("x="+x);
}
public static void main(String[] args) {
test03 t = new test03();
t.mOL(2);
t.mOL(6,5);
t.mOL("Tom");
}
5.方法的递归:在Java中,一个方法的内部调用自身的过程
需要注意的是,递归必须要有结束条件,不然就会陷入无限递归的状态,永远无法结束调用;
每次递归都需要逐步递减,直到有结束值;
public static int getSum(int n){
if(n == 1){
return 1;
}
int temp = getSum(n - 1);
return temp + n;
}
public static void main(String[] args) {
int sum = getSum(4);
System.out.println("Sum = " + sum);
}
6.匿名调用
匿名调用方式: 类名 对象名 = new 调用类名().方法名();
public class Circle {
public double area(double r){
return r*r*3.14;
}
}
public class test02 {
public static void main(String[] args) {
//匿名调用测试
double area = new Circle().area(3);
System.out.println("半径为3的圆的面积为:" + area);
}
}
7.toString()方法
(1)toString()方法在Object类中定义,其返回值是String类型,返回类名和它的引用地址;
(2)在进行String与其它类型数据的连接操作时,自动调用toString()方法;
Person p = new Person;
System.out.println("p=" + p);
//这两句相等;
System.out.println("p=" + p.toString());
(3)可以根据需求在用户自定义类型中重写toString类方法;
(4)基本类型数据转换为String类型时,调用了对应包装类的toString()方法;
(五)构造器(Constructor)
1.构造器也就是构造方法,在Java中,构造方法在类实例化对象时会被自动调用,可以把他看作类的一个特殊成员;
2.构造器的写法:修饰词 方法名( ){ }
3.条件要求:完成构造方法需要同时满足以下三个条件
方法名与类名相同;
在方法名的前面没有返回类型的声明;
在方法中不能使用return语句返回一个值,但是可以单独写return语句来作为方法的结束。
4.构造器的重载:方法可以重载,构造方法也可以重载
在构造器中对方法进行输入,直接使用 new 类名 即可完成;
//构造器重载
//使得对象的创建更加灵活,方便创建各种不同的对象
//构造器重载,参数列表必须不同
public class Person {
public Person(int a){}
public Person(String b){}
public Person(int a,String b){}
} public class test {
public static void main(String[] args) {
new Person(10);
new Person("张三");
new Person(30,"李四");
}
}
程序设计基础·Java学习笔记·面向对象(上)的更多相关文章
- 程序设计基础·Java学习笔记·面向对象(下)
Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- 0021 Java学习笔记-面向对象-包、构造器
封装 面向对象的三大特征: 封装 继承 多态 封装: 将对象的状态信息隐藏,不允许外部程序直接访问 通过该类提供的方法来访问和操作 有啥用: 隐藏类的实现细节 在方法中加入控制逻辑,限制对成员变量的不 ...
- java学习笔记 --- 面向对象2
一.匿名对象 (1)没有名字的对象 (2)应用场景 A:调用方法,仅仅只调用一次的时候. class Car { //描述属性.颜色,轮胎数. String color; int number; ...
- 0029 Java学习笔记-面向对象-枚举类
可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...
- 0019 Java学习笔记-面向对象-方法
方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...
随机推荐
- kubectl详解
kubectl详解 目录 kubectl详解 一.陈述式管理 1. 陈述式资源管理方法 2. k8s相关信息查看 2.1 查看版本信息 2.2 查看资源对象简写 2.3 查看集群信息 2.4 配置ku ...
- Solution -「Gym 102798I」Sean the Cuber
\(\mathcal{Description}\) Link. 给定两个可还原的二阶魔方,求从其中一个状态拧到另一个状态的最小步数. 数据组数 \(T\le2.5\times10^5\). ...
- Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集. \(n,m\le10^5 ...
- MySQL 利用frm文件和ibd文件恢复表结构和表数据
文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...
- Dubbo源码剖析一之整体架构设计
Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中进行Dubbo职能上的简单介绍,下面就其内部进行详细探究: 1.Dubbo调用关系 这个图是不是很熟 ...
- 施耐德NOE77101后门漏洞分析
固件下载地址: GitHub - ameng929/NOE77101_Firmware 文件目录结构,这里只列出了一些主要的文件信息: ├── bin ├── ftp ├── fw ├── rdt ├ ...
- 企业必读:BI数据可视化工具选型
伴随着大数据时代的到来,企业对数据的需求从"IT主导的报表模式"转向"业务主导的自助分析模式",可视化BI工具也随之应运而生.面对如此众多的可视化BI工具,我们 ...
- Spring源码之六-onRefresh()方法
Spring源码之六-onRefresh()方法 大家好,我是程序员田同学. 今天带大家解读Spirng源码之六的onRefresh()方法,这是refresh()的其中的一个方法,看似是一个空方法, ...
- 编译原理 | 构造LR(1)自动机的注意事项
在画图之前,有时候要先对产生式集合进行某些操作. 下图所示的情况,不需要补一条拓广产生式,因为开始符Z没有出现在某条产生式的右侧. 即,如果开始符出现在某条产生式的右部,需要增加拓广产生式.
- Excel:替换表格中的0值
替换时需要勾选"单元格匹配",否则会把所有单元格中的0字符都给替换掉