面向对象编程(基础篇)

目录

面向对象编程(基础篇)

一、类与对象

1、类与对象

2、类的定义

3、对象的创建及使用

4、创建多个对象

二、封装性

三、构造方法

四、匿名对象

五、String类

1、实例化String类对象

2、String对象的内容比较

3、字符串的内容不可变

六、this关键字

1、表示类中的属性

2、使用this调用构造方法

3、this表示当前对象

七、static关键字

1、使用static声明属性

2、使用static声明方法

3、关于main()方法

八、代码块

九、对象数组

十、内部类


一、类与对象

1、类与对象

1>类:定义出一个基本的模板,代表一个共性。

2>对象:一个个具体的东西。

如果要使用一个类,就一定有产生一个对象。对象所具备的操作是类中规定好的方法。

2、类的定义

1>类(属性+方法),一个属性就是一个变量,方法是一些操作的行为。

class 类名称 {数据类型 属性;                                            //声明成员变量(属性)
……public 返回值的数据类型 方法名称(参数1,参数2……){         //定义方法内容程序语句;[return 表达式;]}
}

注:类名称要求开头首字母大写。

3、对象的创建及使用

1>对象的创建

类名 对象名称 = null;               //声明对象
对象名称 = new 类名();              //实例化对象,只要有关键字new就表示开辟新的堆内存空间

2>对象的创建

类名 对象名称 = new 类名();

3>使用对象访问类中的某个属性或方法

访问属性: 对象名称.属性名;
访问方法: 对象名称.方法名();

4、创建多个对象

引用传递:将一个堆内存空间的使用权给多个栈内存空间(一个栈内存只能保存一个堆内存空间的地址,如果想要再指向其他的堆内存空间,则必须先断开已有的指向才能分配新的指向),不同的栈内存将指向同一块堆内存,每个栈内存空间都可以修改堆内存的内容。

二、封装性

1>保证对象不能直接访问类中的属性。

为属性封装:private 属性类型 属性名称;
为方法封装:private 方法返回值 方法名称(参数列表){}

但是属性必须封装又必须访问,所以需要setter和getter方法设置和取得。

注:1.开发过程中,类中全部属性需要封装,再通过setter和getter进行访问。2.封装不单指private,private声明的属性或方法只能在其类的内部被调用,不能在类的外部被调用。3.正常情况下,类方法+类名称就可以完成本类中的方法调用,如果要强调是本类中的方法也可以用this,“this.方法名称()”来调用。4“-”表示private。

三、构造方法

class 类名称{访问权限 类名称(类型1 参数1,类型2,参数2…){程序语句;……        //构造方法没有返回值}
}

注:

1.构造方法的名称必须与类名称一致;

2.构造方法的声明处不能有任何返回值类型的声明;

3.不能再构造方法中使用return返回一个值。

4.当调用关键字new实例化对象的时候才会调用构造方法。

5.只要是类,就必须存在构造方法,如果一个类没有明确的声明一个构造方法则在编译的时候会直接生成一个无参数的,什么都不做的构造方法。

重载:由于构造方法名称本身要求与类名称保持一致,所以只要每个构造方法的参数类型或参数个数不同,就可以实现重载。(所有的重载方法按照参数的个数由多到少,或者是由少到多排列)

四、匿名对象

匿名对象:没有明确给出名字的对象。一般匿名对象只使用一次,而且匿名对象只在堆内存中开辟空间,而不存在栈内存的引用。(使用一次后就等待被垃圾收集机制回收)

五、String类

1、实例化String类对象

1>直接赋值:只要以后声明的字符串内容相同,则不会再开辟新的空间内存。

String name = "zz";

2>构造方法:String类存在一个构造方法,所以可以new实例化对象调用该方法。但是会开辟一个新的空间,真正使用的只是一个使用关键字new开辟的空间,另一个是垃圾空间。

public String(String original)

注:一个字符串就是一个String类的匿名对象,可以调用String类中的方法。

String name = new String("zz");

2、String对象的内容比较

1.String对象的内容实际上都是保存在堆内存之中的,而且堆中的内容是相等的,但是其内容分别保存在了不同的空间,所以即便内容相等,但是地址的值也是不相等的。

2.“==”主要功能是进行数值相等判断的,如果用在String对象上表示的是内存地址数值的比较。

3.equals()方法是由String提供的方法,此方法专门负责进行字符串内容的比较。(使用equals时要注意空指针异常问题)

3、字符串的内容不可变

String类字符串一旦声明则不可改变,而一个String对象内容的改变实际上是通过内存地址的“断开-链接”变化完成的,而本身字符串中的内容并没有任何的变化。

六、this关键字

1、表示类中的属性

在程序中可以使用this调用本类属性

name=name;        //name到底是属性还是构造方法的参数
age=age;          //age到底是属性还是构造方法的参数

在赋值的时候,属性不是明确被指出,所以会造成错误。

this.name=name;              //明确表示为类中的name属性赋值
this.age=age;                //明确表示为类中的age属性赋值

2、使用this调用构造方法

1、构造方法实在实例化一对象时被自动调用的,也就是说在类中的所有方法里,只有构造方法是被优先调用的,所以使用this调用构造方法必须也只能放在构造方法的第一行。

public Person(){System.out.println("一个新的Person对象被实例化");        //无参构造
}
public Person(String name,int age){                         this();                                                 //在此处调用Person类中的无参构造this.name=name;this.age=age;
}

2、对于this调用构造方法的时候一定要留一个构造方法作为出口,即程序中至少存在一个构造方法是不使用this调用其他构造方法的。一般都将无参构造方法作为出口,即在无参构造方法中最好不要再去调用其他构造方法。

3、this表示当前对象

当前对象就是指当前正在调用类中方法的对象

七、static关键字

每个对象有每个对象自己的属性,如果现在有些属性希望所有对象共享,则就必须将其声明为static属性。如果一个类中的方法不想由对象,而是由类名称直接调用,则就可以声明为static方法。

1、使用static声明属性

如果在程序中使用static声明属性的话,则此属性称为全局属性(静态属性),由所有对象共享。

注:一个类中的公共属性可以由一个对象修改,但是不合适。类的公共属性应该由类进行修改,那么有时也就把使用static声明的属性称为类属性。

类名称.static属性;

扩:Java中常用的内存区域

1>栈内存空间:保存所有对象名称(保存了引用的堆内存空间的地址)。

2>堆内存空间:保存每个对象的具体属性内容。

3>全局数据区:保存static属性的内存。

4>全局代码区:保存所有的方法定义。

2、使用static声明方法

用static声明的方法被称为类方法,可以由类名称直接调用。

注:非static声明的方法可以去调用static声明的属性或方法,但是static声明的方法是不能调用非static类型声明的属性或方法。因为程序中所有的属性和方法必须在对象开辟堆内存之后才可以调用,而static类型的方法在对象未被实例化时就可以被类名所调用。

3、关于main()方法

使用的main()方法的定义中,一直有static关键字的存在。

    public static void main(String args[]){}

1>public:表示此方法可以被外部所调用。

2>static:表示此方法可以由类名称直接调用。

3>void:主方法是程序的起点,所以不需要任何的返回值。

4>main:系统规定好默认调用的方法名称,执行的时候,默认找到main()方法名称。

5>String args[]:表示的是运行时的参数。参数的传递形式为”Java 类名称 参数1 参数2 参数3……“。

注:如果一个方法要由主方法直接调用,则必须按以下格式声明:

”public static 方法的返回值类型 方法名称(参数列表){}“

这是因为主方法是静态方法,而静态方法不能调用非静态方法,所以之前的方法声明处才必须加上static关键字。

八、代码块

代码块:用{}括起来的一段代码。

1、普通代码块:用于程序分割使用。

2、构造块:构造代码块是直接写在类中的代码块。构造块优先于构造方法执行,每次实例化对象的时候都会执行构造块中的代码。

3、静态代码块:使用static声明的代码块。静态代码块优先于主方法执行,在类中定义的静态代码块会优先于构造块执行,不管多少个对象产生,静态代码块只执行一次。

九、对象数组

对象数组:包含了一组相关的对象。

数组一定要先开辟空间,使用数组里面的每一个对象必须分别进行实例化。

对象数组也有静态初始化和动态初始化。

类 对象数组名称[]=new 类[数组长度]
Person per[]=new Person[3];

主方法中String args[]就是个对象数组:在主方法中,可以使用String args[]接收初始化参数,实际上这里的String本身就是一个类,所以在主方法中的参数本身就是以对象数组的形式出现的。

十、内部类

1>内部类:如果在类1的内部再定义一个类2,此时这个类2称为内部类,类1称为外部类。

内部类可public或private,声明后,对其访问的限制与成员变量和成员方法完全相同。

内部类的好处是可以方便地访问外部类中的私有属性。同时,外部类也可以方便地访问内部类中的私有属性。

标识符 class 外部类的名称{//外部类的成员标识符 class 内部类的名称{//内部类的成员}
}eg:
class Outer{private String info = "hello world";class Inner{public void print(){System.out.println(info);}}

2>使用static定义内部类:使用static可以声明属性或方法,而使用static也可以声明内部类,用static声明的内部类则变成外部类,但是用static声明的内部类不能访问非static的外部属性。

3>在外部访问内部类:一个内部类除了可以通过外部类访问,也可以直接在其他类中进行调用,调用的基本格式为

外部类.内部类 内部类对象 = 外部类实例.new 内部类();

4>在方法中定义内部类:内部类可以定义在程序的任意位置,例如:代码块中、方法中,但是在方法中定义的内部类不能直接访问方法中的参数,如果方法中的参数想被内部类访问,则参数前必须加上final关键字(JDK1.8开始可以不用加)

Java开发实战经典学习记录(一)相关推荐

  1. java开发实战经典学习笔记第2部分

    18. 面向对象的三大特征:继承,封装,多态. 19. 多态分方法重载和对象多态. 20. 对象使用前必须实例化,堆栈内存空间的开辟(new关键字),一个栈内存只能指向一个堆内存. 21. 构造方法: ...

  2. 李兴华java视频在线观看_李兴华Java开发实战经典视频教程_IT教程网

    资源名称:李兴华Java开发实战经典视频教程 资源目录: [IT教程网]010201_[第2章:简单Java程序]_简单Java程序 [IT教程网]010301_[第3章:Java基础程序设计]_Ja ...

  3. 李兴华java实战经典视频_李兴华Java开发实战经典视频教程

    资源名称:李兴华Java开发实战经典视频教程 资源目录:[一品资源网]010201_[第2章:简单Java程序]_简单Java程序[一品资源网]010301_[第3章:Java基础程序设计]_Java ...

  4. 吃一堑长一智!java开发实战经典答案百度云

    第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率. 三面主管面 ...

  5. Java开发实战经典 目录

    目录 第1部分  Java基础程序设计 第1章  Java概述及开发环境搭建 2 视频讲解:35分钟 1.1  认识Java 2 1.1.1  什么是Java 2 1.1.2  Java语言的特点 3 ...

  6. GitHub上标星75k+超牛的《Java面试突击版》,java开发实战经典第二版答案

    运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1.自我介绍.(你可千万这样介绍: "我叫某某,性别,来自哪里,学校是哪个,自己爱干什么" ...

  7. Java开发实战经典第二版,小白也能看明白

    数据库 2.1 池化技术:如何减少频繁创建数据库连接的性能损耗? 2.2 数据库优化方案(一):查询请求增加时,如何做主从分离? 2.3 数据库优化方案(二):写入数据量增加时,如何实现分库分表? 2 ...

  8. java开发实战经典答案百度云,含面试题+答案

    1.上下文切换 上下文定义 cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文. 引发问题 对于CPU密集型任务,多线程处 ...

  9. java开发实战经典第二版网课,成功收获美团,小米offer

    一.公务员都不要35岁以上的,何况大公司 这让很多人感到惶恐,现在职场上有一种现象:很多用人单位会在招聘信息上明确标注,年龄需在35岁以下.为什么有经验.有人脉的职场中年人会如此遭"嫌弃&q ...

  10. java开发实战经典(第二版)P452 12-3

    12.3   从键盘传入多个字符串到程序中,并将他们按逆序输出在屏幕上. package book;import java.util.Scanner;public class JiOu {public ...

最新文章

  1. sketch如何做设计稿交互_当屏幕可以折叠,交互设计怎么做
  2. 《cloud+》如果百度云飘走了你该怎么办?
  3. MySql数据库查询表信息/列信息(列ID/列名/数据类型/长度/精度/是否可以为null/默认值/是否自增/是否是主键/列描述)...
  4. Network simulation using OPNET
  5. python 库整理:Timm(1)
  6. stm32 usmart使用
  7. 【Python】提升Python程序性能的好习惯
  8. SQL中的函数 •Aggregate 函数 •Scalar 函数
  9. python 计算时间、日期差值类
  10. List遍历的三种方式
  11. 最全的视频格式分类详解(很全面)
  12. 外汇EA是什么?外汇EA有什么用呢?能赚钱吗?
  13. python 使用百度搜索推广API,获取账户基本信息
  14. 一套牛逼哄哄的开源的监控系统(附源码)
  15. SAP ALV报表开发实战案例(三)
  16. COSCon'22@Beijing | 北京分会场等你赴约
  17. 编译时多态、运行时多态
  18. wps自动图文集 重新编号_如何在Word中创建和使用自动图文集词条
  19. 运营商大数据如何应用?优势有哪些?
  20. Android Factory Images for Nexus Devices

热门文章

  1. 凭借左程云(左神)的这份 “程序员代码面试指南”我入职了字节
  2. 用于PDF文件转曲,方法介绍
  3. python 文件操作新姿势 pathlib模块的详细使用
  4. settimeout在各个浏览器的最小时间
  5. 一步步的Abaqus2021版本安装教程+汉化操作
  6. Vue 引入 zepto
  7. vue项目本地服务器调用豆瓣接口,vue调用豆瓣API加载图片403问题
  8. vmware之VMware Remote Console (VMRC) SDK(二)
  9. 尝鲜ESXi7.0,手工注入LSI MegaRAID 9260-8i驱动,封装iso安装文件
  10. Fortran95学习总结