JavaSE(五)

news/2025/2/7 0:45:34/

目录

  • 1 类定义和使用
    • 1.1 类的定义
    • 1.2 类的使用
  • 2 类的实例化
    • 2.1 实例化的概念
    • 2.2 类和对象的区别
  • 3 this 引用
    • 3.1 this引用的概念
    • 3.2 this引用的特性
  • 4 对象的构造及初始化
    • 4.1 构造方法
      • 4.1.1 概念
      • 4.1.2 特性
    • 4.2 默认初始化
    • 4.3 就地初始化
  • 5 封装
    • 5.1 封装概念
    • 5.2 访问限定符
    • 5.3 封装扩展
      • 5.3.1 包的概念
      • 5.3.2 导入包中的类
      • 5.3.3 自定义包
      • 5.3.4 常见的包

1 类定义和使用


1.1 类的定义

类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能(用来干什么),描述完成后计算机就可以识别了。在java中定义类时需要用到class关键字, 具体语法如下:

// 创建类
class ClassName{field; // 字段(属性) 或者 成员变量method; // 行为 或者 成员方法
}

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。类中包含的内容称为类的成员。属性主要是用来描述类的,称之为类的成员属性或者类成员变量。方法主要说明类具有哪些功能,称为类的成员方法。

1.2 类的使用

public class Student{public String name;public String gender;public short age;public double score;public void DoClass(){}public void DoHomework(){}public void Exam(){}
}

注意事项:

  1. 一般一个文件当中只定义一个类
  2. main方法所在的类一般要使用public修饰
  3. public修饰的类必须要和文件名相同
  4. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改

2 类的实例化


2.1 实例化的概念

用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

public class Main{public static void main(String[] args) {Student s1 = new Student(); //通过new实例化对象s1.name = "张三";s1.age = 19;s1.DoHomework();s1.Exam();Student s2 = new Student(); //通过new实例化对象s2.name = "李四";s2.age = 19;s2.DoHomework();s2.Exam();}
}

注意事项:

  • new 关键字用于创建一个对象的实例.
  • 使用 . 来访问对象中的属性和方法.
  • 同一个类可以创建对个实例.

2.2 类和对象的区别

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
  2. 类是一种自定义的类型,可以用来定义变量,但是在java中用类定义出来的变量我们称为对象.
  3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量.
  4. 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间.

3 this 引用


3.1 this引用的概念

java编译器给每个“成员方法“增加了一个隐藏的引用类型参数,该引用参数指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该引用去访问.只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成.

public class Date {public int year;public int month;public int day;public void setDay(int year, int month, int day){this.year = year;this.month = month;this.day = day;} public void printDate(){System.out.println(this.year + "/" + this.month + "/" + this.day);}
}

this引用是编译器自动添加的,用户在实现代码时一般不需要显式给出。
注意: this引用的是调用成员方法的对象

3.2 this引用的特性

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在"成员方法"中使用
  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象,具有final属性
  4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收

4 对象的构造及初始化


4.1 构造方法

4.1.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 d = new Date(2021,6,9); // 输出Date(int,int,int)方法被调用了d.printDate(); // 2021-6-9}
}

注意: 构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。

4.1.2 特性

  1. 名字必须与类名相同
  2. 没有返回值类型,设置为void也不行
  3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次
  4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
  5. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。
  6. 构造方法中,可以通过this调用其他构造方法来简化代码
public class Date {public int year;public int month;public int day;// 无参构造方法--内部给各个成员赋值初始值,该部分功能与三个参数的构造方法重复// 此处可以在无参构造方法中通过this调用带有三个参数的构造方法// 但是this(1900,1,1);必须是构造方法中第一条语句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(…)必须是构造方法中第一条语句
  • 不能形成环
public Date(){this(1900,1,1);
} 
public Date(int year, int month, int day) {this();
} /* 
无参构造器调用三个参数的构造器,而三个参数构造器有调用无参的构造器,形成构造器的递归调用
编译报错:Error:(19, 12) java: 递归构造器调用
*/
  1. 绝大多数情况下使用public来修饰,特殊场景下会被private修饰.

4.2 默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?

Date d = new Date(2021,6,9);

在程序层面只是简单的一条语句,在JVM层面:

  1. 检测对象对应的类是否加载了,如果没有加载则加载
  2. 为对象分配内存空间
  3. 处理并发安全问题
  4. 初始化所分配的空间
  5. 设置对象头信息
  6. 调用构造方法<>,给对象中各个成员赋值

4.3 就地初始化

在声明成员变量时,就直接给出了初始值。

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();}
}

注意:代码编译完成后,编译器会将所有给成员初始化的这些语句添加到各个构造函数中

5 封装


5.1 封装概念

面相对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互

5.2 访问限定符

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了四种访问限定符:

No范围privatedefaultprotectedpublic
1同一包中的同一类
2同一包中的不同类
3不同包中的子类
4不同包中的非子类

说明:

  • protected主要是用在继承中
  • default权限指:什么都不写时的默认权限
  • 访问权限除了可以限定类中成员的可见性,也可以控制类的可见性

5.3 封装扩展

5.3.1 包的概念

在面向对象体系中,提出了一个软件包的概念,即:为了更好的管理类,把多个类收集在一起成为一组,称为软件包.有点类似于目录.在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可

5.3.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 java.util.*;
import java.sql.*;
public class Test {public static void main(String[] args) {// util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错Date date = new Date();System.out.println(date.getTime());}
}// 编译出错
Error:(5, 9) java:Date的引用不明确
java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配

在这种情况下需要使用完整的类名.

import java.util.*;
import java.sql.*;
public class Test {public static void main(String[] args) {java.util.Date date = new java.util.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);}
}

5.3.3 自定义包

基本规则:

  • 在文件的最上方加上一个 package 语句指定该代码在哪个包中.
  • 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).-
  • 包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.
  • 如果一个类没有 package 语句, 则该类被放到一个默认包中.

操作步骤:

  1. 在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包
    在这里插入图片描述
  2. 在弹出的对话框中输入包名, 例如 com.ziye.demo1
    在这里插入图片描述
  3. 在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名即可.
    在这里插入图片描述
  4. 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了
    在这里插入图片描述
  5. 同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句
    在这里插入图片描述

5.3.4 常见的包

  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编程开发包.

http://www.ppmy.cn/news/369262.html

相关文章

Quartus2_13.0初级使用教程

Quartus2_13.0新手使用教程 此次教程以Altera公司的FPGA芯片cyclone IV EP4CE10F17C8N为例&#xff0c;所以使用主要开发软件是其公司配套的quartus2_13.0&#xff0c;其中仿真软件使用modelsim10.5se、代码编辑软件notepad7.6.6、辅助软件如画波形图的专业画图软件Visio 2013…

ES5

JS基础整理 注意&#xff1a; console.log(2 undefined 3) NAN 只要带 console.log(2 true 3) 6 true会解析成1&#xff0c;false解析为0 0、 1、 0、空字符串、null、undefined、false、NAN&#xff0c;都会转化为false 2、 非0数字、非空字符串、非空对象都会转化为tr…

JAVASE5

常用系统类 1常用系统类 ◆Object Object类是所有Java类的最终祖先。 如果一个类在声明时没有包含extends&#xff08;继承&#xff09;关键字&#xff0c;那么这个类直接继承Object ◆System System 类是一个抽象类&#xff0c;所有的字段和方法都是静态的。其中包含一些有用的…

JavaSE05

package day05; /*** Java异常捕获异常机制中* try-catch* 语法:* try{* 代码片段* } catch(异常类){* 捕获try代码片段中的XXException并处理* }*/ public class DemoTryCatch_1 {public static void main(String[] args) {try{//String str null;String str2 "…

JavaSE 05

JavaSE 05 1. 内部类相关 普通内部类 静态内部类 局部内部类 匿名内部类 内部类总共三大种&#xff0c;最常用的是匿名内部类。 2. try/catch finally 情况一&#xff1a;在不包含return语句的情况&#xff0c;执行顺序如下 #mermaid-svg-nxEbC0Sx4NV4o1Qm {font-family:&quo…

m基于FPGA的GPS收发系统开发,包括码同步,载波同步,早迟门跟踪环,其中L1采用QPSK,L2采用BPSK

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 最早的GPS包含L1和L2两个频段&#xff0c;其中L1上调制CA码&#xff0c;P码以及导航电文&#xff0c;L2上调制P码和导航电文。在实际接收到的GPS信号中&#xff0c;我们除了能够接受到CA码和P码外…

Java SE(5)

1.使用Map接口的实现类完成员工工资(姓名–工资)的摸拟&#xff1a; 1)添加几条信息 2)列出所有的员工姓名 3列出所有员工姓名及其工资 4)删除名叫“Tom”的员工信息 5)输出Jack的工资&#xff0c;并将其工资加1000元(通过取值实现) 6)将所有工资低于1000元的员工的工资上涨20%…

ES5..

一.ES5 在2009年推出的新的语法 1).严格模式 使用use strict,它又分为全局严格和局部严格 这句话必须放在代码的第一行 1).全局严格 // "use strict";//全局严格模式function fn1() {console.log(this); //undefined}fn1()function fn2() {console.log(this); //u…