【JavaSE】Java入门四(面向对象 1——四千五百字详解)

目录

 类和对象

1.什么是类

2. 对象的初始化及使用(this关键字)

3.封装的概念及应用(含Java中常见的包)

4.static关键字

5.代码块

6.内部类


 类和对象

Java 是一门纯面向对象的语言 (Object Oriented Program ,简称 OOP) ,在面向对象的世界里,一切皆为对象。 向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。相比于面相过程,用面相对象的思想来进行程序设计,对于开发者更加友好,对于大型程序的设计,扩展,维护更有帮助。
面向对象有三大特征:封装,继承,多态。Java就是依靠类和对象来依次实现这三大特征的 ,我会在接下来的文章中详细介绍这三大特征。

1.什么是类

在面相对象的思想中,我们需要把各种事物抽象成对象(也可以说是一个实体),类是用来对一个实体(对象)来进行描述的,在java中定义类时需要用到class关键字。在下面这段代码中,我们定义了一个洗衣机类:

class WashMachine{
public String brand; // 品牌
public String type; // 型号
public double weight; // 重量
public double length; // 长
public double width; // 宽
public double height; // 高
public String color; // 颜色
public void washClothes(){ // 洗衣服
System.out.println("洗衣功能");
}
public void dryClothes(){ // 脱水
System.out.println("脱水功能");
}
public void setTime(){ // 定时
System.out.println("定时功能");
}
}

这里面包含的内容成为类的成员,其中成员变量称为类的属性,成员方法称为类的行为。

tips:

  • 类名我们统一采用阿里规定的大驼峰定义法。
  • 一般一个java文件只定义一个类
  • main方法所在的类一般要用public修饰
  • public修饰的类必须要和文件名相同

2. 对象的初始化及使用(this关键字)

在Java中定义了一个类,就相当于在计算机中定义了一个新的引用类型,与数组,String类似,不过前者是用户自定义的类型,后者是Java中内置的。

对象就相当于用自定义类型声明的一个变量,用类类型初始化对象的过程,成为类的实例化。定义如下:

类名 对象名 = new 类名()//new后面跟的是类的构造方法。

构造方法 ( 也称为构造器 ) 是一个特殊的成员方法, 名字必须与类名相同,在创建对象时,由编译器自动调用,并且 在整个对象的生命周期内只调用一次。
一个类至少有一个构造方法,没写编译器自动生成无参构造方法,也可以定义多个构造方法,特点跟方法重载一样。
构造方法的特性:
  1. 名字必须与类名相同
  2.  不能有返回值类型,设置为 void 也不行
  3. 可以根据用户需求重载多个构造方法
  4. 一旦用户定义的有构造方法,编译器不会自动生成无参构造方法。

下面是初始化一个日期对象的代码案例:

public class Date {
public int year;
public int month;
public int day;
// 无参构造方法
public Date(){
this.year = 1900;
this.month = 1;
this.day = 1;
}
// 带有三个参数的构造方法
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
public void printDate(){
System.out.println(year + "-" + month + "-" + day);
}
public static void main(String[] args) {
Date d = new Date();
d.printDate();
}
}

在上述代码中我们可以看到构造方法中的变量名与类中的变量名重名了,为了区分两者,Java中引入了this关键字。

this引用指向当前对象 ( 成员方法运行时调用该成员方法的对象 ) ,在成员方法中所有成员变量的操作,都是通过该引用去访问。这些操作都是编译器自动完成
小技巧:
在构造方法中可以通过this关键字来调用其他构造方法,如下:
public Date (){
//System.out.println(year); 注释取消掉,编译会失败
this ( 1900 , 1 , 1 );
//this.year = 1900;
//this.month = 1;
//this.day = 1;
}
// 带有三个参数的构造方法
public Date ( int year , int month , int day ) {
this . year = year ;
this . month = month ;
this . day = day ;
}
}
  •  其中this必须是构造方法中的第一条语句
  • 不能形成闭环

3.封装的概念及应用(含Java中常见的包)

从开始学习Java到现在,相信你已经发现每段Java代码都少不了的一个关键字就是 public,而他就与我们要学习的封装概念有关。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
比如下面这段代码,Computer类中的成员变量用private修饰之后,就不能通过p.cpu来访问cpu这个成员变量了,以此便实现了封装功能。
public class Computer {
private String cpu; // cpu
private String memory; // 内存
public String screen; // 屏幕
String brand; // 品牌---->default属性
public Computer(String brand, String cpu, String memory, String screen) {
this.brand = brand;
this.cpu = cpu;
this.memory = memory;
比特就业课
注意:一般情况下成员变量设置为private,成员方法设置为public。
6.3 封装扩展之包
6.3.1 包的概念
在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件
包。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件
下,也可以对某个文件夹下的音乐进行更详细的分类。
this.screen = screen;
}
public void Boot(){
System.out.println("开机~~~");
}
public void PowerOff(){
System.out.println("关机~~~");
}
public void SurfInternet(){
System.out.println("上网~~~");
}
}
public class TestComputer {
public static void main(String[] args) {
Computer p = new Computer("HW", "i7", "8G", "13*14");
System.out.println(p.brand); // default属性:只能被本包中类访问
System.out.println(p.screen); // public属性: 可以任何其他类访问
// System.out.println(p.cpu); // private属性:只能在Computer类中访问,不能被其他类访问
}
}

上述关键字我们称为访问限定符,Java中提供了四种访问限定符分别是private,default,protected,public。【JavaSE】Java入门四(面向对象 1——四千五百字详解)_第1张图片

default即什么都不写时的权限。 

为了更好的管理类,Java中引入了包(packet)的概念,即文件夹。

包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式 ,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可
我们可以用import导入包:
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到一个毫秒级别的时间戳
System.out.println(date.getTime());
}
}

可以使用import static导入包中静态的方法和字段:

import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 静态导入的方式写起来更方便一些.
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}

Java中常见的包:

  • 1. java.lang:系统常用基础类(StringObject),此包从JDK1.1后自动导入。
  • 2. java.lang.reflect:java 反射编程包;
  • 3. java.net:进行网络编程开发包。
  • 4. java.sql:进行数据库开发的支持包。
  • 5. java.util:java提供的工具程序包。(集合类等) 非常重要
  • 6. java.io:I/O编程开发包。

4.static关键字

 static修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。可以通过类名直接调用,静态方法储存在下图中的方法区中。

【JavaSE】Java入门四(面向对象 1——四千五百字详解)_第2张图片

5.代码块

使用 {} 定义的一段代码称为代码块
  • 普通代码块:定义在发放中的代码块
  • 构造代码块:定义在类中的代码块,也叫:实例代码块构造代码块一般用于初始化实例成员变量
  • 静态代码块:使用static定义,一般用于初始化静态变量。
  • 同步代码块:使用synchronized关键字修饰的代码块。

tips:

  1. 静态代码块不管生成多少个对象,其只会执行一次
  2. 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  3. 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
  4. 实例代码块只有在创建对象时才会执行

6.内部类

在Java中可以将一个类定义在另一个类或者一个方法的内部,称为内部类。

public class OutClass {
class InnerClass{
}
}
// OutClass是外部类
// InnerClass是内部类
内部类和外部类共用同一个 java 源文件,但是经过编译之后,内部类会形成单独的字节码文件
内部类又可以分为实例内部类,静态内部类,局部内部类,匿名内部类四种。
  • 实例内部类:即上述代码中普通的内部类形式。
  • 静态内部类:在实例内部类前加上static关键字。
  • 局部内部类:定义在方法内的普通内部类。
  • 匿名内部类:没有类名的内部类,与接口一起使用。

匿名内部类的书写形式:父类/接口  对象 = new 父类/接口(){   重写父类/接口中的方法   };

你可能感兴趣的:(java,开发语言)