厦门seo网站管理,郑州网络营销哪个好,搜索引擎优化趋势,网页设计培训三个月然后就业文章目录 前言1. 什么是面向对象#xff1f;1.2面向过程和面向对象 2.类的定义和使用2.1什么是类#xff1f;2.2类的定义格式2.3类的实例化2.3.1什么是实例化2.3.2类和对象的说明 3.this引用3.1为什么会有this3.2this的含义与性质3.3this的特性 4.构造方法4.1构造方法的概念4… 文章目录 前言1. 什么是面向对象1.2面向过程和面向对象 2.类的定义和使用2.1什么是类2.2类的定义格式2.3类的实例化2.3.1什么是实例化2.3.2类和对象的说明 3.this引用3.1为什么会有this3.2this的含义与性质3.3this的特性 4.构造方法4.1构造方法的概念4.2构造方法的性质4.3成员变量初始化4.3.1默认初始化4.3.2就地初始化 4.4构造方法快速创建 5.封装5.1封装的概念5.2封装如何实现 6.封装扩展之包6.1什么是包6.2怎么打开包导入包的类6.3自定义包 7.static成员7.1再谈学生类7.2static修饰成员变量7.3static修饰成员方法7.4static成员变量初始化 8.代码块8.1代码块概念及分类8.2普通代码块8.3 构造代码块8.4静态代码块 结语 前言
咬咬牙学了一段时间Java慢慢掌握基础知识今天我们来学习熟悉又陌生的类和对象的相关内容。我们会了解static和public究竟是什么意义是什么等等会对Java的基本逻辑有更深刻的了解还能让我们更加熟练多变的使用Java语言。话不多说让我们开始吧 1. 什么是面向对象
要知道什么是类之前我们要先了解所谓的面向对象的Java语言。 我们知道Java是一门纯面向对象的语言(Object Oriented Program简称OOP)。面向对象是解决问题的一种思想主要依靠对象之间的交互完成一件事情。
1.2面向过程和面向对象
我们的C语言就是一种面向过程的语言基本上什么都需要我们自己来编写结合现实生活我们可以举个例子。
〚洗衣服〛 现在我们来试试细分一下洗衣服的步骤 拿盆——放水——放衣服——放洗衣液——搓衣服——换水——再洗——拧干——晾衣服 这是我们传统情况下的洗衣服注重的是洗衣服的过程。 而当我们用洗衣机洗衣服的时候就完全不一样了。
〚洗衣机洗〛 分析一下啊 人拿衣服——打开洗衣机——放衣服——放洗衣粉——开启洗衣机——拿衣服——晾衣服 经过细致到人的拆解一共就仅仅以上几小步并没有洗衣服的过程。在其中总共只有四个对象人、衣服、洗衣粉、洗衣机以面向对象的方式来进行处理就不关注洗衣服的过程用户只需要通过对象之间的交互来完成〚洗衣服〛这件事就可以了这就是面向对象的特点。
注意面向过程和面向对象并不是一门语言而是解决问题的办法并没有好坏之分都有对应的应用场景理解万岁
2.类的定义和使用
2.1什么是类
Java中的类和C语言中的结构体有些相似都是用多种类型数据来描述一个复杂事物。 面向对象程序设计关注的是对象而对象是现实生活中的实体比如洗衣机等但洗衣机计算机并不知道它的特点就需要开发人员进行具体描述。 类是用来对一个实体对象来进行描述的主要描述其具有哪些属性哪些功能。 还是洗衣机可以看成一个对象 属性尺寸品牌重量颜色等 功能甩干定时等 那么在Java语言中如何描述呢
2.2类的定义格式
在Java中定义类时需要用到class关键字
class ClassName{field;//字段属性或者成员变量method//行为 或者叫成员方法
}class为关键字 ClassName为类名 {}中为类的主体 类中包含的内容就称为类的成员属性是用来描述类的称之为类的成员属性或者成员变量。方法主要说明类具有哪些功能称为类的成员方法。
class Dog{//狗类注意命名是大驼峰定义String name;//狗名int age;//年龄String color;//毛色public void bark(){System.out.println(this.name 正在汪汪叫...);}public void eat(){System.out.println(this.name 正在吃吃吃....);}2.3类的实例化
2.3.1什么是实例化
定义了一个类就相当于定义了一种新的类型和基本类型int、double等类似不过类属于用户自定义的一种新的类型。 而用类的类型创对象的过程就叫类的实例化。我们在Java中使用关键字new来实现实例化。
public class test {public static void main(String[] args) {Dog dog1 new Dog(dahuang,11,huangse);dog1.name 阿黄;dog1.color 黑黄;dog1.bark();dog1.eat();
}
输出结果
2.3.2类和对象的说明
总结来看
类像一个设计图用来对一个实体进行抽象概括描述限定了类中有哪些成员是一种自定义类型。一个类可以实例化出多个对象对象就是具体的实体有自身独有的数据实例化出的对象占据实际的物理空间来存储成员变量。
3.this引用
3.1为什么会有this
在介绍之前我们先来看一段代码。
class Date {public int year;public int month;public int day;public void setDay(int y, int m, int d) {year y;month m;day d;}
}自定义了一个日期类在main中实例化就可以写日期了看起来很完美也确实很完美。
但我们要是这样改一下还可以实现正常的功能吗
public void setDay(int year, int month, int day) {year year;//形参名和成员变量名相同并没有报错month month;day day;}如果这样在使用的时候到底函数传入进来的数据是谁在给谁赋值就搞不清楚了像这个时候就需要我们的this关键字登场了
3.2this的含义与性质
this的含义引用指向当前对象即成员方法运行时调用该成员方法的对象。 简单说就是指名道姓谁对象调用这个成员方法this就指向这个“谁” 在成员方法中的所有成员变量的操作都是由this引用去访问。
3.3this的特性
this的类型对应类类型引用哪个对象调用就是那个对象的引用类型this只能在成员方法中使用在“成员方法”中this只能引用当前对象不可引用其他任何对象。this其实是“成员方法”中第一个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用的成员方法的对象的引用传递给成员方法this相当于变量负责来接收。 4.构造方法
上面代码发现每次都要一个个的引用成员变量来实例化对象感觉很麻烦有没有那种一次搞定的
4.1构造方法的概念
【构造方法】其实是一个特殊的成员方法方法名字必须与类名相同在实例化对象时自动调用并在整个对象的生命周期中只调用一次。
public class Date {public int year;public int month;public int day;// 构造方法// 名字与类名相同没有返回值类型设置为void也不行// 一般情况下使用public修饰// 在创建对象时由编译器自动调用并且在对象的生命周期内只调用一次public Date(int year, int month, int day){this.year year;this.month month;this.day day;System.out.println(Date(int,int,int)方法被调用了);}public void printDate(){System.out.println(year - month - day);}public static void main(String[] args) {// 此处创建了一个Date类型的对象并没有显示调用构造方法Date date new Date(2021,6,9); // 输出Date(int,int,int)方法被调用了date.printDate(); // 2021-6-9}
}4.2构造方法的性质
构造方法有如下几种性质
构造方法只负责对成员变量进行初始化并不开辟空间名字必须与类名相同没有返回值类型设置void也不行构造方法是可以重载的参数不同即可如果用户没有设置构造方法编译器会自动生成一份默认不带参数的构造方法一旦用户定义了构造方法编译器就不再生成
4.3成员变量初始化
那要是这样就有一个问题出现了 “为什么成员变量不初始化使用时不会报错而局部变量会报错呢为什么为什么为什么”接下来就会揭晓了 4.3.1默认初始化
要搞清楚这个问题我们就要去探究new这个关键字发挥作用的过程。
Date date new Date(2023124);//实例化对象
String date 2023/12/4//局部变量初始化在程序层面只是简单的一条语句在JVM层面需要做好多事情下面简单介绍下
检测对象对应的类是否加载了如果没有加载则加载为对象分配内存空间处理并发安全问题 比如多个线程同时申请对象JVM要保证给对象分配的空间不冲突初始化分配的空间如下这是不会报错的关键
数据类型初始值byte0char“u0000”short0int0long0Lbooleanfalsefloat0.0fdouble0.0referencenull
设置对象头信息调用构造方法给对象中各个成员赋值
4.3.2就地初始化
这个很好理解就是在声明成员变量时直接手动设置了初始值。
public class Date {public int year 1900;public int month 1;public int day 1;public Date(){}public Date(int year, int month, int day) {}public static void main(String[] args) {Date d1 new Date(2021,6,9);Date d2 new Date();}
}4.4构造方法快速创建
IDEA中有快速创建成员变量构造方法的操作。
操作步骤 1. 在IDEA中创建新的类和几个成员变量
class cat{String name;int age;String sex;
}2.创建构造方法右键代码空白处-选择generate-选择Constructor
3.在弹出的对话框中按住CTRL选择你想要构造的成员变量
4.成功 5.封装
5.1封装的概念
面向对象程序三大特性封装、继承、多态。 而类和对象阶段主要研究的就是封装特性。何为封装呢 简单来说 就是套壳屏蔽细节。
5.2封装如何实现
Java中主要通过类和访问权限来实现封装类可以将各类数据以及封装数据的方法结合在一起而访问权限用来控制方法或者字段能否直接在类外使用。因此Java提供了以下四种访问限定符 private、public、protected、default
一般情况下成员变量一般设置为private成员方法设置为public。
6.封装扩展之包
6.1什么是包
在面向对象体系中提出了软件包的概念即 为了更好的管理类把多个类收集在一起为一组称为软件包也有点类似于目录。
在Java中也引入了包包是对类、接口等的封装机制的体线是一种对类或者接口等很好的组织方式。
包还有一个重要作用在同一个工程中允许存在相同名称的类只要各自在不同的包中即可。
6.2怎么打开包导入包的类
Java中已经提供了很多线程的类供我们使用例如Date类可以使用java.util.Date导入java.util这个包中的Date类。
public class Test {
public static void main(String[] args) {java.util.Date date new java.util.Date();System.out.println(date.getTime());}
}但是这样写要是多起来每次都要写一遍太麻烦了可以使用import语句导包。
import java.util.Date;
public class Test {public static void main(String[] args) {Date date new Date();System.out.println(date.getTime());}
}如果需要使用java.util中的其他类可以使用import java.util.*
import java.util.*;
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 sqrt(pow(x, 2) pow(y, 2));System.out.println(result);}
}6.3自定义包
基本规则
在文件的最上方加上一个 package 语句指定该代码在哪个包中.包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 )包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储 代码.如果一个类没有 package 语句, 则该类被放到一个默认包中.
操作步骤 在IDEA中先新建一个包右键src - 新建 - 包 在弹出的对话框中输入包名例如com.test.demo1 在包中创建类 右键包名 - 新建-类然后输入类名即可 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了 同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句
7.static成员
7.1再谈学生类
使用前文中介绍的学生类实例化三个对象s1、s2、s3每个对象都有自己特有的名字、性别年龄学分绩点等成员信息这些信息就是对不同学生来进行描述的如下所示
public class Student{// ...public static void main(String[] args) {Student s1 new Student(Li leilei, 男, 18, 3.8);Student s2 new Student(Han MeiMei, 女, 19, 4.0);Student s3 new Student(Jim, 男, 18, 2.6);}
}假设三个同学是同一个班的那么他们上课肯定是在同一个教室那既然在同一个教室那能否给类中再加一个成员变量来保存同学上课时的教室呢答案是不行的。
之前在Student类中定义的成员变量每个对象中都会包含一份(称之为实例变量)因为需要使用这些信息来描述具体的学生。而现在要表示学生上课的教室这个教室的属性并不需要每个学生对象中都存储一份而是需要让所有的学生来共享。在Java中被static修饰的成员称之为静态成员也可以称为类成员其不属于某个具体的对象是所有对象所共享的。
7.2static修饰成员变量
static修饰的成员变量称为静态成员变量该变量最大的特征就是不属于某个具体的对象是所有对象所共享的
【静态成员变量特性】
不属于某个具体对象是类的属性所有对象共享的不存储在某个对象的空间中存在方法区中既可以通过对象访问也可以通过类名访问一般更推荐后者生命周期伴随类的一生随类的加载而创建随类的卸载而销毁
7.3static修饰成员方法
上面的学习我们知道一般类中的成员变量都设置为private而成员方法设置为public那设置之后Student中的classRoom属性如何在类外访问呢 在Java中被static修饰的成员方法称为静态成员方法是类的方法不是某个对象所特有的。 静态成员一般是通过静态方法来访问的普通方法也可以访问 【静态方法特性】
不属于某个具体的对象是类的方法可以通过对象调用也可以通过类名.静态方法名方式调用更推荐后者不能!在静态方法中访问任何非静态成员变量静态方法中不能调用任何非静态方法因为非静态方法有this参数在静态方法中调用时无法传递this引用
7.4static成员变量初始化
注意静态成员变量一般不会放在构造方法中来初始化构造方法中初始化的是与对象相关的实例属性
静态成员变量的初始化分为两种就地初始化和静态代码块初始化。
就地初始化 就地初始化指的就是在定义是直接给初始值
public class Student{private String name;private String gender;private int age;private double score;private static String classRoom 430;
}静态代码块初始化 这里就到了代码块了我们接着往下看就好了。
8.代码块
8.1代码块概念及分类
【基础概念】 使用{}定义的一段代码称为代码块。
根据代码块定义的位置以及关键字又可以分为以下四种
普通代码块构造块静态块同步代码块这里先不讨论
8.2普通代码块
这个很好理解就是定义在方法中的代码块。
public class Main{
public static void main(String[] args) {{ //直接使用{}定义普通方法块int x 10 ;System.out.println(x1 x);}int x 100 ;System.out.println(x2 x);}
}// 执行结果
x1 10
x2 1008.3 构造代码块
构造块定义在类中的代码块不加修饰符。 也叫实例代码块。构造代码块一般用于初始化实例成员变量
public class Student{//实例成员变量private String name;private String gender;private int age;private double score;public Student() {System.out.println(I am Student init()!);}//实例代码块{this.name bit;this.age 12;this.sex man;System.out.println(I am instance init()!);}public void show(){System.out.println(name: name age: age sex: sex);}
}
public class Main {public static void main(String[] args) {Student stu new Student();stu.show();}
}8.4静态代码块
static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
public class Student{private String name;private String gender;private int age;private double score;private static String classRoom;//实例代码块{this.name bit;this.age 12;this.gender man;System.out.println(I am instance init()!);}// 静态代码块static {classRoom bit306;System.out.println(I am static init()!);}
}【注意事项】
静态代码不管生成多少个对象只会执行一次静态成员变量是类的属性因此是在JVM加载类时开辟空间并初始化的如果一个类中包含多个静态代码块在编译代码时编译器会按照定义的先后次序依次执行(合并)实例代码块只有在创建对象时才会执行 结语
好了以上就是本篇“【Java】类和对象详解总结”博客的全部内容啦感谢各位的阅读v如有不足之处欢迎在评论区指出哦 觉得可以的话别忘了点赞三连支持一下欧拜托啦这对我真的很重要o(ω )o!