一、面向对象

概念

现实世界:

类:抽象的概念,把具有相同特征和行为的事物归为一类
先有实体,再有类的概念

代码世界:

类:抽象的概念,把具有相同属性和方法的对象归为一类
先有类,再创建对象

类的作用: 类相当于一个模板,是一组具有相同属性与方法的事物集合

  1. 类中只有属性和方法
  2. 属性也叫做全局变量,属性分为成员变量和静态变量
  3. 方法分为成员方法和静态方法
public class 类名{//成员变量数据类型 变量名;//静态变量static 数据类型 变量名;//成员方法访问修饰符 返回值类型 方法名([参数]){}//静态方法访问修饰符 static 返回值类型 方法名([参数]){}
}

1. 对象

成员属性/成员变量

语法结构:数据类型 变量名;
编写的位置:类里面,方法外面

成员变量 vs 局部变量
成员变量:类里面,方法外面的变量,并且系统会赋默认值,作用在整个类中
局部变量:方法里面的变量,系统不会赋默认值,作用在方法中

成员方法

语法结构:访问修饰符 返回值类型 方法名([参数]){}
编写的位置:类里面

成员方法 vs 静态方法
成员方法:属于对象的方法,必须使用对象调用
静态方法:属于类的方法,使用类名调用

创建对象的语法:

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

new 类名(): 属于对象,就在堆内存中开辟空间
类名 对象名 :对象名属于引用,存的是对象在堆内存中的地址

操作对象:

  1. 设置成员属性
  2. 访问成员属性:对象.属性
  3. 调用成员方法:对象.方法()

需求:模拟人类,并创建对象

Person.java

public class Person {//成员属性String name;int age;//成员方法public void eat(){System.out.println("吃饭饭");}//方法中的this表示调用该方法的对象public void sleep(){System.out.println(this.name + "睡觉觉");}//静态方法public static void method(){}
}

Test.java

public class Test {public static void main(String[] args) {//创建对象Person p = new Person();//设置成员变量p.name = "樱岛麻衣";p.age = 18;//访问成员变量System.out.println(p.name);System.out.println(p.age);//调用成员方法p.eat();p.sleep();//静态方法用类名调用Person.method();}
}

2.构造方法

含义: 和new一起是创建对象的功能

特点:

  1. 与类名相同的方法
  2. 没有返回项

注意:

  1. 当类中没有写构造方法时,系统会默认添加无参构造(无参数的构造方法)
  2. 构造方法可以重载的

有参构造好处: 创建对象时,把可以直接把数据赋值给该对象

public class Person{//构造方法public Person(){}//注意:这种不是构造方法,是成员方法public void Person(){}
}

需求:编写人类,操作对象

Person.java

public class Person {String name;int age;//无参构造public Person() {}//有参构造public Person(String name) {this.name = name;}public Person(String name, int age) {this.name = name;this.age = age;}public void eat() {System.out.println(this.name + "吃饭饭");}public void sleep() {System.out.println(this.name + "睡觉觉");}
}

Test.java

public class Test {public static void main(String[] args) {Person p = new Person("一之濑千鹤", 18);System.out.println(p.name);System.out.println(p.age);p.eat();p.sleep();}
}

3. private - 私有化

含义: 私有化

作用:

  1. 修饰属性:私有化属性,不能让外界使用
  2. 修饰方法:私有化方法,不能让外界使用

应用场景:不让让外界访问的属性和方法就用private修饰

需求:做实验证明private关键字作用

A.java

public class A {//私有化属性private String str;//私有化方法private void method01(){System.out.println("私有化方法");}public void method02(){//操作私有化属性this.str = "通过同一个类里的public方法操作私有化属性";System.out.println(this.str);//通过同类里的public方法调用私有方法method01();}
}

Test.java

public class Test01 {    public static void main(String[] args) {A a = new A();a.method02();}
}

4. 封装

步骤:

  1. 私有化属性
  2. 添加get(获取)/set(设置)方法

好处: 外界不可以直接操作属性,必须通过get、set方法操作,可以在get、set方法中做格外的功能

需求:模拟银行存钱

User.java

import java.time.LocalDateTime;
//用户类--封装私有化属性
public class User {private String username;private String password;private double money;public User() {}//有参构造public User(String username, String password, double money) {this.username = username;this.password = password;this.money = money;}//设置金额的方法 - set public void setMoney(double money){LocalDateTime now = LocalDateTime.now();//获取到当前系统时间System.out.println(now);this.money = money;}//获取金额的方法 - getpublic double getMoney(){return this.money;}public String getUsername() {return username;}
}

Test.java

public class Test {public static void main(String[] args) {User user = new User("一之濑千鹤", "123123", 1000);//通过get、set方法操作私有化属性user.setMoney(user.getMoney()+500);System.out.println(user.getUsername()+"有"+user.getMoney()+"存款");}
}

5. this - 本对象

含义:代表本对象,this出现方法里,表示调用该方法的对象

作用:

  1. this.属性:调用本对象的成员变量
  2. this.方法:调用本对象的成员方法
  3. this():调用本对象的构造方法(只能在构造方法中的第一句调用)

Person.java

public class Person {private String name;private char sex;private int age;public Person() {//在一个构造方法中的第一句调用另外一个构造方法this("椎名真白",'女',18);}public Person(String name, char sex, int age) {this.name = name;this.sex = sex;this.age = age;}public void eat(){//调用本对象的属性System.out.println(this.name + "吃饭饭");//调用本对象的方法this.sleep();}public void sleep(){System.out.println(this.name + "睡觉觉");}
}

Test.java

public class Test {public static void main(String[] args) {Person p1 = new Person("石原里美", '女', 18);p1.eat();Person p2 = new Person();p2.eat();}
}

6. Java包

基本作用:包主要用来对类和接口进行分类。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,可以避免名字冲突。

项目作用:项目中有众多的类,把相同功能的类放在同一个包中,方便管理
工具类:com.miku.util/tool
实体类:com.miku.vo/bean/entity
数据库类:com.miku.dao/mapper

package com.miku.util;

import 语句

在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

import 语句应位于 package 语句之后,所有类的定义之前

例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类

import java.io.*;

7. static - 静态的

1. 修饰属性

类加载到方法区时,JVM会扫描该类的所有属性,并把静态属性加载到静态区中,静态属性属于类属性,该类所有的对象都共享该属性,静态属性直到项目结束时才会被回收

注意:静态属性使用类名调用

2. 修饰方法

属于类方法,直接用类名调用
应用场景:工具类

MyArrays.java

public class MyArrays {/*** 替换* @param arrays 原数组* @param value  替换的值*/public static void replace(int[] arrays, int value) {for (int i = 0; i < arrays.length; i++) {arrays[i] = value;}}}

Test.java

public class Test {public static void main(String[] args) {int[] arrays = {32, 4, 234, 2};//直接用类名调用MyArrays.replace(arrays, 888);}
}

3. 静态代码块

静态代码块类加载到方法区时就会被调用,该代码块只能初始化静态变量
代码块创建对象时优先于构造方法调用,该代码块可以初始化成员变量和静态变量
构造方法创建对象时调用,该方法可以初始化成员变量和静态变量

public class A {String str1;static String str2;//静态代码块static{str2="初始化静态变量";System.out.println("A类的静态代码块"+str2);}//代码块{str1 = "初始化成员变量";//this.str1 = "初始化成员变量";str2 = "初始化静态变量";//A.str2 = "初始化静态变量"System.out.println("A类的代码块" + str1 + "--" + str2);}//构造方法public A() {str1 = "初始化成员变量";//this.str1 = "初始化成员变量";str2 = "初始化静态变量";//A.str2 = "初始化静态变量"System.out.println("A类的构造方法" + str1 + " -- " + str2);}}

成员变量 vs 静态变量
成员变量: 属于对象的变量,每个对象独享一份
静态变量: 属于类的变量,每个对象都共享一份

A.java

public class A {//成员变量String str1;//静态变量static String str2;}

Test.java

public class Test {public static void main(String[] args) {A a1 = new A();A a2 = new A();a1.str1 = "成员变量,属于对象的变量,独享1";a2.str1 = "成员变量,属于对象的变量,独享2";System.out.println(a1.str1);//输出“成员变量,属于对象的变量,独享1”System.out.println(a2.str1);//输出“成员变量,属于对象的变量,独享2”//        不应该通过类实例访问静态成员
//      a1.str2 = "xxx";
//      通过类A直接访问静态成员A.str2 = "静态变量,属于类的变量,共享1";A.str2 = "静态变量,属于类的变量,共享2";System.out.println(A.str2);//输出“静态变量,属于类的变量,共享2”System.out.println(A.str2);//输出“静态变量,属于类的变量,共享2”}
}

面试题:类加载过程的理解

class A{//类加载过程↓//准备阶段1:在静态区开辟空间//A a;//int v1;//int v2;//准备阶段2:赋系统默认值//A a = null//int v1 = 0;//int v2 = 0;//初始化阶段:private static A a = new A();//创建对象时,调用了构造方法----此时v1=1,v2=1public static int v1;     //int v1 = 1;public static int v2 = 0; //int v2 = 0;//构造方法private A(){v1++;v2++;}
}class B{//类加载过程↓//准备阶段1:在静态区开辟空间//int v1;//int v2;//B b;//准备阶段2:赋系统默认值//int v1 = 0;//int v2 = 0;//B b = null;//初始化阶段public static int v1; //int v1 = 0;public static int v2 = 0; //int v2 = 0;private static B b = new B();//创建对象时,调用了构造方法----此时v1=1,v2=1private B(){v1++;v2++;}
}public class Test {public static void main(String[] args) {//问以下代码输出结果System.out.println("A类中变量v1:" + A.v1);//v1=1System.out.println("A类中变量v2:" + A.v2);//v2=0System.out.println("B类中变量v1:" + B.v1);//v1=1System.out.println("B类中变量v2:" + B.v2);//v2=1}
}

JavaEE - 面向对象-构造方法、封装、类加载过程相关推荐

  1. cqh-class 文件内容,类加载过程,编写第一个程序

    文章目录 2. 编写第一个程序 2.1 编写源代码并运行 2.1.1 创建 .java 文件编写源码 2.1.2 配置环境变量 2.1.3 解释代码含义 2.1.4 编译与运行 2.2 class 文 ...

  2. python面向对象编程(封装与继承)

    一. 面向过程编程语言 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.分析出解决问题所需要的步 骤,然后用函数把这些步骤一步一步实现,使用的时候 ...

  3. Java 面向对象和封装

    目录 Java 面向对象和封装 面向对象思想的概述 类和对象的关系 什么是类 什么是对象 类和对象的关系 局部变量和成员变量的区别 this关键字 构造方法 一个标准的类 Java 面向对象和封装 面 ...

  4. 黑马程序员---面向对象上(封装,继承,多态)

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  5. python 面向对象之封装与类与对象

    封装 一,引子 从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,小老虎一起装进麻袋,然后把麻袋封上口子.照这种逻辑看,封装='隐藏',这种理解是相当片面的 二,先看如何隐藏 在 ...

  6. Java类加载过程详解

    类的生命周期 类的加载 类加载过程 加载 链接 验证 准备 解析 初始化 总结 首先我们先简单了解一下整个JVM的体系结构是怎样的,如下图所示(图1): 再详细具体一点(图2): 上面的图片有些地方看 ...

  7. Python中的面向对象(类的实例化,面向对象的封装、继承与多态)

    文章目录 1.面向对象的定义 1.1 定义类.属性和方法 1.2 如何将类转化为对象(实例化) 1.3 构造方法 2.面向对象的封装 2.1 封装的定义 2.2 封装的练习 1.体重与跑步 2.栈的功 ...

  8. python面向对象编程 -- 封装、继承

    面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...

  9. JVM:类加载机制之类加载过程

    类加载机制概念  Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.准备.解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制.* Class文件由 ...

最新文章

  1. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题
  2. Intelij IDEA注册码生成代码
  3. 你应该学会的接口调试神器——Postman高级用法
  4. Elasticsearch-集群原理
  5. Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式)
  6. python 3解释器_python004 Python3 解释器
  7. 在Windows 7中打开Telent客户端服务
  8. 在idea中创建mybatis-config.xml模板(在idea中创建mybatis核心配置文件模板)
  9. 【cornerstoneTools】【vue】使用cornerstoneTools搭建标注系统相关代码
  10. Java面试回忆录:java电子书免费
  11. 【OpenCV4 官方文档】机器学习概述
  12. c语言作业班级管理系统,班级信息管理系统(C语言)
  13. Charles安装破解和基础配置
  14. 十大思维导图软件推荐
  15. 【树莓派】使用VNC远程桌面
  16. WIN7安装启动盘制作并支持usb3.0
  17. redis 返回 key 的剩余的过期时间(RedisTemplate封装PTTL 命令)
  18. IP、 TCP、 UDP协议
  19. 通用管理平台GBase 8c Platform
  20. 部门来了个测试工程师,一副小毛孩样,本以为很菜,谁想到...

热门文章

  1. 什么是专利查新检索报告?
  2. jQuery和SVG炫酷弹射纸飞机动画特效
  3. 蓝桥杯 锻造兵器 JAVA TreeMap的使用
  4. 【保姆级教程】手把手教你用github制作学术个人主页(学者必备)
  5. 好工具推荐系列:Python IDE之PyCharm/Spyder/Jupyter/Eric
  6. CPU 平均负载为多少更合理?
  7. 关于移动互联网产品的指标分析初探
  8. 一个指令,WIN11菜单键改回WIN10
  9. java aes iv 24位_【JAVA】AES加密 简单实现 AES-128/ECB/PKCS5Padding
  10. Intel集成显卡驱动安装linux