类与对象(二)

封装

封装作为面向对象三大特性(封装,继承,多态)之一,那如何实现封装性的呢?就又得拿出上面的访问修饰限定符的图
访问修饰限定符
public: 就是在任何地方都可以访问
protected: 涉及子类在介绍继承时详细介绍
default: 什么都不写时默认权限,在当前包下面访问
protect: 在当前类中可以访问。

包的概念:

包就像我们创建的文件夹一样,里面包含多种类。跟c语言的头文件差不多。

导包:

那在C语言中我们要导入头文件,自然在Java中使用Java自带的类也要导包(这种意义上导包就是要写到类),使用
关键字import导包,如下:

import java.util.Date;
public class Test { public static void main(String[] args) {
    Date date = new Date();// 得到一个毫秒级别的时间戳
     System.out.println(date.getTime());
    }
}

当我们需要使用该包下的其他类时Java中有一个简便写法,
import java.util.*;但是如此写就会在有些情况下出先bug,例如
util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译就会出错
*导包方法错误
所以这种导包不建议。
在这种情况下要解决就需要将包在程序写上
java.util.Date date = new java.util.Date();这不是多此一举吗。

idea中自定义包

包名采用小驼峰(首单词首字母小写,其余单词首字母大写)
1.鼠标右击文件
2.左击new
3.左击package
自定义包

常见包

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

static成员

成员变量/方法被static修饰就是静态成员变量/方法,
这样的成员是所有对象共用的

静态成员变量特性

  1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  3. 类变量存储在方法区当中
  4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

静态成员方法特性

  1. 不属于某个具体的对象,是类方法
  2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者
  3. 不能在静态方法中直接访问任何非静态成员变量,要访问就必须要实例化对象来通过对象调用。例如:
class Student{
	private string name = "zhangsan";
	public static fun(){
		Student student = new Student();
		student.name = "lisi";
	}
}

应用场景

在这一个类中实例化任何对象时,每个对象都一样的成员变量/方法就可以用static来修饰,例如要对一个班级中的同学写成绩管理系统,那他们的班级就是一样的就可以用static修饰。

static成员变量的初始化

  1. 就地初始化:在定义时直接给出初始值public static className = "一班";
  2. 默认初始化
  3. 通过构造方法中进行赋值
  4. 通过set方法进行赋值
  5. 静态代码块初始化

代码块

代码块(用{}括起来的代码都是代码块)有很多种,在这就先介绍两种。

静态代码块

定义形式很简单,定义在类内,成员方法外,如下

static {
//代码
}

1.它一般用于初始化静态成员变量。
2.只要类加载就会调用执行,且执行一次。
3.如果有多个静态代码块且里面对同一变量进行了操作,就以最后一个为准。例如:

class Student{
	private string className = "一班";
	static{
		className = "二班";
	}
}
//这种结果就是二班
class Student{
	static{
		className = "二班";
	}
	private string className = "一班";
}
//这种结果就是一班

构造代码块

也叫非静态代码块,还叫实例代码块。定义在类内,成员方法外。

class Student{
    private string name;
	private string className = "一班";
	static{
		className = "二班";
	}
	{
		name = "zhangsan";
	}
}

特性:
1.一般用来初始化非静态成员变量
2.只要实例化对象就会调用执行。
3.如果有多个静态代码块且里面对同一变量进行了操作,就以最后一个为准。

静态代码块,构造代码块,构造方法调用顺序

先执行静态代码块且只执行一次,
在执行构造代码块,
最后执行构造方法。

对静态static的我的理解

那就是static静态的东西不依赖对象,它的调用就直接用类,
在静态中要想调用非静态的就必须要实例化对象来通过对象调用。

相关推荐

  1. 对象

    2024-05-14 01:12:08       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-14 01:12:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-14 01:12:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-14 01:12:08       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-14 01:12:08       20 阅读

热门阅读

  1. C# 中的匿名方法

    2024-05-14 01:12:08       13 阅读
  2. Maximo 使用 REST API 创建 Cron Task

    2024-05-14 01:12:08       10 阅读
  3. 信息化总体架构方法_1.信息化的一般概念

    2024-05-14 01:12:08       10 阅读
  4. Linux专题-Makefile(1)

    2024-05-14 01:12:08       11 阅读
  5. 关于ARINC653的疑问

    2024-05-14 01:12:08       7 阅读
  6. 实用 Chrome 指令

    2024-05-14 01:12:08       8 阅读
  7. 高精度题库

    2024-05-14 01:12:08       7 阅读
  8. 轻松寄快递,推荐一款寄快递优惠的小程序!

    2024-05-14 01:12:08       9 阅读
  9. 【Web前端】jquery_json

    2024-05-14 01:12:08       10 阅读
  10. git把repo1中的test目录中的代码同步到repo2中

    2024-05-14 01:12:08       11 阅读