实训实习第一周day03

Day03

1. 面向对象

面向过程:是一种编程思想,就是分析出解决问题所需要的步骤,然后用方法把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象:就是一种编程思想,是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

2. 类与对象

1.什么是类?

类是具备某些共同特征的实体的集合,是对所具有相同特征实体的抽象, 例如人类、车类、星球类,动物类, 猪类等

2.什么是对象?

对象是类的实例,简单的认为对象就是类中具体的个体

通常都会将对象划分为两个部分,即动态部分(方法)与静态部分(成员变量)。

①静态部分:顾名思义就是不能动的部分,这个部分被称为“属性”,如一个人,它包括高矮、胖瘦、性别、年龄等属性——成员变量。

②动态部分:人可以哭泣、微笑、说话、行走,这些是这个人具备的行为(动态部分)——方法。

3. 设计类

设计类语法:
public class 类名{ 

	//可编写 0 到 N 个成员变量 
	
	[修饰符] 数据类型 变量名 1; 
	[修饰符] 数据类型 变量名 2; 
	
	
	//可编写 0 到 N 个成员方法 
	
	[修饰符] 返回值类型 方法名称(参数){ 
	//方法体 
	} 
	
}

类规范书写:

类名大驼峰,见名知意

成员变量名小驼峰,见名知意

类和成员变量上方必须写文档注释;

修饰符

1. 类修饰符

  • public(访问控制符): 将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。

  • abstract:将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。

  • final:将一个类申明为最终(即非继承类),表示他不能被其他类继承。

  • 默认不写:默认的修饰符,只有在相同包中的对象才能使用这样的类。

2. 成员变量修饰符

  • public(公共访问控制符):指定该变量为公共的,他可以被任何对象的方法访问。

  • private(私有访问控制符):指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。

  • protected(保护访问控制符):指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。

  • 默认不写 :在同一个包中的类可以访问,其他包中的类不能访问。

  • final:最终修饰符,指定此变量的值不能变。

  • static(静态修饰符):指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。

  • transient(过度修饰符):指定该变量是系统保留,暂无特别作用的临时性变量。

  • volatile:指定该变量可以同时被几个线程控制和修改。

3. 方法修饰符

  • public(公共控制符: 指定此方法可以被自己和其他的类访问

  • private(私有控制符):指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)

  • protected(保护访问控制符):指定该方法可以被它的类和子类进行访问。

  • final:指定该方法不能被重载。

  • static:指定不需要实例化就可以激活的一个方法。

  • synchronize:同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。

  • native:本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的

4. 创建对象和成员变量赋值取值

1.创建对象

创建对象语法:
类名 对象名 = new 类名();

例如:

public class StudentTest {

	public static void main(String[] args) {
		//3.1. 创建对象(相当于复制模板): 语法: 类名 对象名 = new 类名();
		Student student = new Student();//必须声明一个Student类型的变量接收当前对象地址
	}
}

2.给对象成员变量赋值

给成员变量赋值语法:
对象名.成员变量 = 值; //注意:必须值和成员变量数据类型一致
例如:
public class StudentTest {

	public static void main(String[] args) {
		//3.1. 创建对象(相当于复制模板): 语法:类名 对象名 = new 类名();
		Student student = new Student();//必须声明一个Student类型的变量接收当前对象地址
		
		//3.2. 对象赋值(填写信息)	语法:	对象名.成员变量 = 值;
		student.name = "苍老师";
		student.age = 37;
	}
}

3.对象取值和对象调用实例方法

对象取值语法:
对象名.成员变量 ; 
对象调用实例方法:
   对象名.方法名(…);
例如:
public class StudentTest {

	public static void main(String[] args) {
		//3.1. 创建对象(相当于复制模板): 语法:类名 对象名 = new 类名();
		Student student = new Student();//必须声明一个Student类型的变量接收当前对象地址
		
		//3.2. 对象赋值(填写信息)	语法:	对象名.成员变量 = 值;
		student.name = "苍老师";
		student.age = 37;
		
		//3.3. 对象取值(相当于查询信息)	语法:	对象名.成员变量;
		System.out.println(student.name);//"苍老师"	
		System.out.println(student.age);//37		
		
		//3.4. 对象调用非static(实例)方法	语法:	对象名.方法名(...);
		student.study();
	}
}

5. 构造方法

1.构造方法引入

new Student(); 创建一个学生类的对象

上面代码本质是调用Student中的无参数的构造方法!

2.什么是构造方法

  1. 构造方法的结构和普通方法类似,但是和普通方法完全不同两个代码块;

  2. 构造方法也是方法,意味着使用了构造方法,方法会执行,也能完成功能

  3. 构造方法就是一个代码块【就是一个结构 ,构造方法和 字段 方法一样都是一个类中的成员之一】

  4. 构造方法也该存在于类的结构体中

3.构造方法语法:

  1. 构造方法的名字和类名完全一致(包括大小写完全一致)

  2. 没有返回值类型(void也不行)

  3. 构造方法方法体不能返回任何的值(即不能在方法体中return 值)

  4. 其他的和普通方法类似 ,可以有修饰符(public、protected、private、默认),可以有形参列表

  5. 构造方法必须有方法体

  6. 构造方法不能有任何非访问性质的修饰符修饰,例如 static、final、synchronized、abstract等都不能修饰构造方法。

注意:new Student() 这个整体既是一个Student对象,又是调用的Student的无参数构造方法

4.构造方法特点

① 每一个类中都至少有一个构造方法;

② 如果没有看到(显示的),那么存在一个隐式的无参数的构造方法;

③ 如果一个类中有显示的构造方法,那么隐式的无参的构造方法就不存在了;

5.构造方法注意事项和小结

1.普通方法不要和类名一致,行业默认规则;

2.普通方法(Method)和构造方法(Constructor)是不同的两种结构

3.普通方法的调用 : 3种

类名.方法名(…); -有static修饰的

对象名.方法名(…);

方法名(…); --同一个类里面 都要static 或 都没有static修饰

4.构造方法的调用 :

(目前为止) new 类名(...);

6. 包(package)

包(package)概念:简单的理解包就是一个文件夹

包作用:(不是单纯的文件隔离,目的是告诉jvm知道文件隔离)

① 可以管理代码结构

500W项目(10000个文件) 没有包不好管理

② 可以避免类名冲突的问题

一个项目中有可能多个类名一样

定义包

包命名规范:

一般是公司域名反过来写+项目名+模块名字+子模块名

包名中应该全部都是英文,并且是小写的

例如 : cxjcloud.cn 域名

package cn.cxjcloud.erp.oa.domain;自动化办公

package cn.cxjcloud.erp.sa.entity; 系统管理

注意:不要写成nc.

导入包(其实本质是导入包中的类)

导入包的语法 : import 包名.子包名.类名;

注意:

  1. 导入包的代码应该在声明包(就是该类所在的包)的后面,声明类的前面

  2. import java.util.*; 表示导入本包中所有会使用到的,util包中的类;

只会导入util包下面直接的类型,不包括util包的子包中的类型

  1. java.lang是核心包,下面的直接类型是自动导入的;

例如:String、System类

lang包的子包中的类型不会自动导入,需要手动导入

  1. 在一个类中会用到同名不同包的时候必须使用全限定路径

例如:同时使用java.util.Date和java.sql.Date

7.封装(重点)

1.封装的作用

封装是为了保护内部数据的安全:

1.不希望在外部类中随意访问类中的成员变量

  1. 达到权限要求的才能访问。

  2. 只是获取数据的时候,例如 单例模式

2.怎么封装

  1. 如何控制程序中的访问 ?

通过给类中的成员(字段,方法,构造方法)添加访问权限修饰符来实现封装(访问控制)

  1. 什么是访问权限:简单的认为访问权限就是不同级别的人能够干不同级别的事,不同级别的人能看到的页面是不同的

例子:比如做一个系统,不同人登录进去的访问权限不一样;

  1. 访问权限修饰符:

public 最大权限,被其修饰的成员,在任意目录下,都可以访问到 (所有类)

​ protected 在同包类和子类中都可以访问

​ 默认不写 只能在同包类中访问

​ private 只能在当前类中访问

3.封装的步骤(重点)

  1. 私有化成员变量(用private修饰成员变量)

  2. 为每一个成员变量提供合理的

getXxx()方法 获取成员变量的值,如果当前成员变量类型是boolean类型,将getXxx()改为 isXxx()

setXxx(...)方法 设置成员变量的值

  1. 提供一个无参构造

  2. 该类用public修饰

4.封装的注意事项

  1. 不是只有private才叫封装,private只是最大限度的封装而已。

  2. get和set方法都是只能获取或者赋值一个成员变量,不能set(String n,double m,boolean v)赋值3个成员变量

  3. 单一职能原则:功能最小化,不要想着一个方法写完所有的功能,因为代码复用率高

8. this注意和小结

1.this用途:

  1. 解决局部变量和成员变量的二义性(掌握) --> 注意 set/get方法 构造方法

  2. 在本类之间 ,构造方法之间的相互调用 this()调用无参数的构造方法,this(...)可以添加参数,表示调用有参数的构造方法 (掌握)

  3. this作为参数传递,this作为返回值 (了解)

2.this注意事项:

  1. this不能在静态的方法中使用 : 无法从静态上下文中引用非静态成员this

  2. static类级别,this对象级别

​ static修饰的是属于类被共享,而this是某一个具体的对象地址

posted @ 2021-08-19 08:57  x2245  阅读(28)  评论(0)    收藏  举报