Java基础Note——面向对象01

面向对象01

软件设计

原则:
可重用性,可拓展性,可维护性

面向对象的最小单位是类。
面向对象四大特征:封装,继承,多态,抽象

类和对象

特征:封装,继承,多态,抽象

关系:类是多个对象抽象出来的共性
对象是类的实例,类是对象的模板

类的定义

在面先过程中,专门为描述对象定义一个类,不需要main。
另外再创建测试类

内存分析

不同类型的成员变量的初始值就是各个类型的默认值。

对象的创建实质上类似于栈中有个指针,指向了堆空间中创建的一组数据。

对象打印和比较-生命周期-匿名对象

打印对象:对象名@hashcode.(哈希表中的值)

比较:对象直接 == 比较的是地址值

生命周期:new关键字在heap中开辟新空间创建,当堆中对象未被任何变量引用,且被GC回收时结束。

匿名对象:没有名称的对象,new Object();匿名对象在堆中开辟一块没有名称的对象,只能使用一次

构造器

编译器在编译源文件时会默认创建一个缺省构造器,即默认的一个构造器。所以类中一定会有构造器

作用:1)构建对象,但是必须和new一起使用。2)完成对象初始化
特点:构造器名称和当前类的名称相同;禁止使用返回类型,返回类型默认当前类的类型;不需要return;构造器返回值是当前类的地址

new xxx();其实是调用类中的构造器创建对象。

编译器创建的默认构造器特点:
1)符合构造器特点。
2)无参
3)无方法体
4)类A使用了public修饰,则构造器有public,无则构造器也无。

如果我们自定义了构造器,则编译器不创建缺省构造器**。**
某一个类至少在编译后有一个构造器

构造器是特殊方法,也可重载

static修饰符和特点

类中有些属性不是属于某一个具体对象的,而是属于整个事物的特征,比如说全世界人的总数

状态和行为有对象和类型之分
某些状态和行为属于对象,不同的对象,其状态行为不同
某些属于类型,不属于对象

表示属于类本身的类型要用static

static修饰符表示静态的,可修饰字段,方法,内部类,其修饰的成员属于类。static修饰的只属于类级别的

static修饰符特点:

  1. static修饰的成员,随着所在类加载而加载;即当JVM把字节码加载的时候,static修饰成员以及在内存中存在
  2. 优先于对象的存在。对象是通过new关键字创建的
  3. static修饰的成员被该类型所有对象共享;根据该类创建出来的任何对象都可访问static成员
  4. 表面上通过对象访问static成员,本质上依然是使用类名访问。和对象无关
  5. static修饰的成员直接属于类,可以使用类名访问static成员

static在JVM中的存储

类中static修饰的存储在方法区
在这里插入图片描述

类中static成员,通过反编译本质上是类名访问。所以在访问static的时候一定要类名访问

类成员和实例成员的访问

类中的成员:字段,方法,内部类

类成员:直接属于类,使用static修饰的成员

实例成员:只属于对象,没有使用static修饰的成员

在static方法中只能调用static成员

static使用情况:
如果这些行为或者状态属于这个类,就用static,被所以实例化后的对象所共享。
在开发中,往往把工具方法使用static修饰(只需要一份)
如果不使用static就必须创建对象才能调用

变量的分类

成员变量:可以使用后定义

局部变量:必须先定义后使用(其实本质还是先定义在使用
在类实例化,创建类等情况下,成员变量已经创建
在这里插入图片描述
开发中尽量缩小变量的作用范围,性能高

不要动不动就是用成员变量,因为存在着线程的不安全问题,能使用局部变量尽量使用局部变量

为了将java文件放到特殊文件夹分类。关键字package,专门用来给java文件设置包名

语法格式:package 包名.子包.子子包 (第一行代码)

此时的编译命令:javac -d . 文件名
如果在java文件中使用了package,则表示在当前目录中生成包名,再在包中生成字节码.

运行命令:java 包名.类名

包名定义:自定义包名,不能以java.开头
包名必须遵循标识符规范/全部小写
企业开发中,包名使用公司域名倒写 (520it.com—> com._520it)
但是在Android中包名使用 _ 则不能部署倒模拟器上,所以用字母代替

格式:package 域名倒写.模块名.组件名;
在这里插入图片描述
类的名称:

​ 类的简单名称:定义类的名称. PackageDemo
​ 类的全限定名称:包名.类名; com._520it.hello.PackageDemo.

在开发中,都是现有package而后在package中再定义类

java(JDK)中的包

在这里插入图片描述

包的引用import

如果A类和B类不在同一包中,A需要B,则需要在A中引入B类。

未使用import之前,操作不在同一包中的类,需要使用全限定名操作。

格式:import 需要导入类的全限定名;

java默认会自动找java.lang的包(System,String)

使用通配符的语法格式(包中所有类都导入)
格式:import 包名.子包名.*; 表示会引入该包下所有在当前文件使用到的类( * 表示类名)

静态导入(static import) 不推荐

将别的包中的类中的成员直接导入进来

语法:import static 类的全限定名.该类中的static成员名

静态导入就是语法糖,在实际开发中不实用静态导入,会分不清某一个方法或字段来源于哪个类

发布了7 篇原创文章 · 获赞 11 · 访问量 371

猜你喜欢

转载自blog.csdn.net/Archerrrrr/article/details/104571588
今日推荐