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学习笔记·面向对象(上)的更多相关文章

  1. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...

  2. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  5. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  6. 0021 Java学习笔记-面向对象-包、构造器

    封装 面向对象的三大特征: 封装 继承 多态 封装: 将对象的状态信息隐藏,不允许外部程序直接访问 通过该类提供的方法来访问和操作 有啥用: 隐藏类的实现细节 在方法中加入控制逻辑,限制对成员变量的不 ...

  7. java学习笔记 --- 面向对象2

    一.匿名对象 (1)没有名字的对象 (2)应用场景   A:调用方法,仅仅只调用一次的时候. class Car { //描述属性.颜色,轮胎数. String color; int number; ...

  8. 0029 Java学习笔记-面向对象-枚举类

    可以创建几个对象? n多个:大部分的类,都可以随意创建对象,只要内存不爆掉 1个:比如单例类 有限的几个:采用单例类的设计思路,可以只允许创建少数的几个特定的对象:还有就是枚举类. 创建少数几个对象, ...

  9. 0019 Java学习笔记-面向对象-方法

    方法属于谁 方法要么属于类,要么属于对象 static修饰的方法属于类 没有static修饰的方法属于对象 方法只能定义在类里面,不能独立定义 不能独立的执行方法,要么通过类调用,要么通过方法调用 一 ...

随机推荐

  1. MySQL时间格式TIMESTAMP和DATETIME的区别

    时区,timestamp会跟随设置的时区变化而变化,而datetime保存的是绝对值不会变化 自动更新,insert.update数据时,可以设置timestamp列自动以当前时间(CURRENT_T ...

  2. 带你十天轻松搞定 Go 微服务之大结局(分布式事务)

    序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...

  3. opencv笔记--SURF

    SURF(Speeded-Up Robust Features) 是对 SIFT 得改进,相对于 SIFT,SURF 利用积分图像与盒函数模拟 DoG,提升了计算速度:同时,使用了一种不用于 SIFT ...

  4. MySQL 5.7 基于GTID主从复制+并行复制+半同步复制

    环境准备 IP HOSTNAME SERVICE SYSTEM 192.168.131.129 mysql-master1 mysql CentOS7.6 192.168.131.130 mysql- ...

  5. Nginx安装启用

    安装版本为1.17.8. 1.安装Nginx依赖, pcre. openssl. gcc. zlib(推荐使⽤yum源⾃动安装) yum -y install gcc zlib zlib-devel ...

  6. react 也就这么回事 02 —— JSX 插值表达式、条件渲染以及列表渲染

    我们已经学会了 React 创建元素和渲染元素 ReactDOM.render(<div>Hello React!</div>, document.getElementById ...

  7. python中函数isinstance()用来判断某个实例是否属于某个类

    1 print(isinstance(1,int)) # 运行结果 True 2 # 判断1是否为整数类的实例 3 print(isinstance(1,str)) # 运行结果 False4 # 判 ...

  8. NSSCTF-[UTCTF 2020]Zero

    做misc嘛,先把题目一开始就给的一串英文翻译一下, 可以看到说明的是这个txt文档可能是包含其他的文本量,这个文本里面还有其他的东西,只是正常是看不到, 使用binwalk或者fomost分离尝试, ...

  9. 国内专业web报表工具,完美解决中国式报表难题

    近几年报表工具的热度不断上升,很多企业都用上了全新的报表工具,主要是企业数据化转型已经成为趋势.在进行选型的时候,很多企业最好都选择国内的报表工具,相信一些人不知道为什么国内的报表工具表现比国外的好. ...

  10. 【C#基础概念】程序集清单

    .NET Core 程序集(模块)还包含描述程序集本身的元数据,我们称之为清单.清单记录了当前程序集正常运行所需的所有外部程序集.程序集的版本号.版权信息.模块 .资源(图片 xml等)等.与类型元数 ...