271-280IDEA模板的使用/包/包的命名/常用的包/引入包/访问修饰符/封装的介绍

一、IDEA模板的使用

模板template
前面我们使用过了main的模板,还有是sout的模板,这里使用一个fori的模板

->main
public static void main(String[] args) {}
->sout
System.out.println();
->fori
for循环
在file->settings->editor->Live templates这里面可以查看目前有哪些模板快捷键可以使用,不仅可以使用默认已经存在的快捷键,还可以自己添加新的模板。

模板
image
输入对应的模板词就会出现下面Template text中对应的东西
点击这里的加号就可以自己定义了
image
image
输入要添加的模板名称,然后再Template text中输入添加的模板内容,然后选择应用到Java中使用(No applicable contexts. Define)。
image
输入模板的名称即可以快速的使用到模板的内容
练习:
1、使用一下main,sout,fori这三个默认的模板
这里我使用Alt + r的使用运行的是上次的冒泡排序
因为当前运行文件没有切换回来,这里我是用Ctrl + Shift + F10运行的;
在使用fori的时候光标的位置是
for (int i)这里i的位置,可以直接输入当前的循环变量名字,这里可以使用Tab键跳到下一个位置,也就是i<xx,这里的xx的位置。
2、在file->settings->editor->Live templates自己添加一个模板。
这里我设置一个scanner的模板,对应内容为
Scanner scanner = new Scanner(System.in);

import java.util.Scanner;

public class Test {
    // main
    public static void main(String[] args) {
        // fori
        for (int i = 0; i < 3; i++) {
            // sout
            System.out.println("test template");
            // scanner
            Scanner scanner = new Scanner(System.in);
			这里不要忘记Alt + 回车哦
        }
    }
}

二、引入包

包的概念,先看一个应用场景引入包的概念:
现在有两个程序员共同开发一个Java项目,程序员小明希望定义一个类取名叫做Dog,程序员小强也想要定义一个类叫做Dog,两个程序员为此还吵了起来,怎么办?
包的三大作用:
包可以区分相同名字的类
当类很多的时候可以很好的管理类(查看JavaAPI文档)
image
控制访问的范围
看文档中不同的包下面对应各种各样的接口、类等。
包让他们不会冲突。
image
对应的可以看到,包相当于是一个文件夹。
后面讲到访问修饰符的时候结合包来进行讲解包是如何控制访问范围的。

包的基本语法
package com.hspedu;
说明:
1、package是关键字,表示打包
2、com.hspedu:表示包名

练习:
1、查看JavaAPI文档看看包下面是不是对应不同的类
https://www.matools.com/api/java8
image
确实如此。
2、看看Java的源码SRC
image
包相当于一个文件夹。

三、包的原理

包的本质分析,包的本质实际上就是创建不同的文件夹来保存类文件,画出示意图来进行分析:
image
文件夹相当于包,不同的包中可以创建不同的类,也可以创建相同的类。
练习:无

四、包的快速入门

解决前面的创建相同类不行的问题。
使用打包技术来创建Dog类
新建一个项目来完成
image
和创建Java类一样在SRC中右键创建一个包package,一个是小明的包,一个是小强的包
所以一个是com.xiaoming一个是com.xiaoqiang
com相当于是这个包的一级目录,小明和小强相当于是下一级的两个目录
image
然后分别在com.xiaoming和com.xiaoqiang中创建一个Dog类
不能再相同的包下面创建同名的类,但是可以再不同的包下面创建,彼此之间就隔离开来了
image
image
我们要使用的时候需要指明使用的是哪个包下的Dog类
image
直接输出会显示具体是哪个包下面的类,然后接着一个hashcode码的十六进制的写法
同理可以使用小明的Dog类,这个时候有意思,在前面将包名带上了
image
如果不带的话指的就是小强的Dog的,不是小明的Dog了
所以就需要指明的方式区分,而不是导入的方式进行区分
同理也可以输入对应的code码

练习:
1、新建一个项目来练习包
image
2、创建一个com.xiaoming和com.xiaoqiang的包,在文件资源管理器中对照创建。
image
3、分别在com.xiaoming和com.xiaoqiang下面创建一个Dog类
image
4、创建一个use包,下面创建一个TestDog类,分别使用com.xiaoming和com.xiaoqiang下面的Dog类来创建dog对象并且打印输出hashcode。
image

五、包的命名

包的命名
命名规则:只能包含数字,字母,下划线,小圆点.,但是不能使用数字开头,不能是关键字或者保留字
demo.class.exec1
这里面有一个关键字不允许
demo.12a
这里以数字开头不行
demo.ab12.oa
可以
命名规范
一般是小写字母+小圆点
com.公司名.项目名.业务模块名
比如:com.hspedu.oa.model;
com.hspedu.oa.controller;
举例:
com.sina.crm.user // 用户模块
com.sina.crm.order // 订单模块
comd.sina.crm.utils // 工具类
练习:无

六、Java当中常用的包有哪些

常用的包,一个包下面有很多的类,java中常用的包如下:

java.lang.*  // lang包是基本的包,默认引入,不需要再引入。
比如使用Math.abs()来求绝对值
System.out.println(Math.abs(-1));
并不需要导入
import java.lang.Math;
java.util.*  // util包,是系统提供的工具包,工具类,比如使用Scanner
Scanner scanner = new Scanner(System.in);
import java.util.Scanner;
java.net.*  // 网络包,做网络开发的
第三阶段的时候会讲到一个项目,做一个多用户的通信系统-推送消息,私聊,发送文件的时候会使用网络包。
java.awt.*  // 是做Java界面开发的GUI
这个是如果要做Java界面的必须使用的包

练习:无

七、如何引入包

看一个案例
如何引入包
com.hseedu.pkg
语法:import 包;
我们引入一个包的主要目的是要使用该包下面的类
比如 import java.util.Scanner;就是只引入一个类Scanner
import java.util*;// 表示将java.util包所有的都引入
案例:使用系统提供的Arrays完成数组的排序
将包的相关代码都放到这个com.hspedu.pkg中
创建一个类Import01.java

// Import01.java
建议:
我们需要使用到哪个类,就导入哪个类即可,不建议使用*的方式导入
import java.util.Scanner;  // 表示只会引入java.util包下面的Scanner类
import java.util.*;  // 表示将java.util包下面的所有类都要引入或者说导入
然后使用Arrays来进行数组的排序
直接输入Arrays回车,因为之前勾选了自动导入,所以回车之后最上面会显示
import java.util.Arrays;
// 使用系统提供的Arrays完成数组的排序
int[] arr = {-1, 20, 2, 13, 3};
// 传统的方式是自己编写排序算法进行排序
// java提供了相关的类,可以方便的完成排序
Arrays.sort(arr);
// 输出排序结果
for (int i = 0; i < arr.length; i++) {
	System.out.println(arr[i] + "\t");
}

包的注意事项和使用细节
1、package的作用是声明当前类所在的包,需要放到类的最上面,一个类中最多只能有一句package
image
2、import指令位置放在package的下面,在类定义的前面,可以有多句并且没有顺序要求。
image
类定义进一步完善了:
成员变量/成员方法/构造器/包->待定
练习:
1、创建一个包com.xxedu.pkg,将所有包知识点的相关代码放这里,创建一个类Import01.java。
2、分别使用import java.util.Scanner;和import java.util.*;的方式完成输入。
tip:我这里在使用Scanner进行字符串的输入的时候

package com.xxedu.pkg;

import java.util.Scanner;

public class Import01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("正在测试import java.util.Scanner...:");
        String str = scanner.next();
        System.out.println("你输入的是->" + str);
    }
}
输入的是hello idea,中间这里有一个空格,但是我接收到的只有hello,经过查询发现:
next()方法会以空格、制表符或换行符作为分隔符,每次只读取一个“单词”,遇到分隔符就会停止。

即,下面这样
image
缓冲区的实际内容是:hello world\n
第一次next读到空格会停止,但是空格仍然在缓冲区中,而后续的next会继续读取后面缓冲区的内容,所以这里后面的换行符也还在缓冲区中,如果不在缓冲区中下面将是两行空行,之所以有一个空行是因为println造成的空行。那么如何解决这个问题呢?
可以使用nextLine,nextLine()会读取直到遇到换行符结束,与next()行为不同。
image
然后就ok了,接下来回到正题。
接下来使用import java.util.*;来测试能不能使用scanner ok.
练习:
3、使用Arrays的sort方法完成数组的排序
ok

// 完整代码
package com.xxedu.pkg;

// import java.util.Scanner;
//import java.util.*;

import java.util.Arrays;

public class Import01 {
    public static void main(String[] args) {
        // 1、scanner.next()
//        Scanner scanner = new Scanner(System.in);
//        System.out.print("正在测试import java.util.Scanner...:");
//        String str = scanner.next();
//        System.out.println("你输入的是->" + str);
//        str = scanner.next();
//        System.out.println("你输入的是->" + str);

        // 2、scanner.nextLine()
//        Scanner scanner = new Scanner(System.in);
//        System.out.print("正在测试import java.util.Scanner...:");
//        String str = scanner.nextLine();
//        System.out.println("你输入的是->" + str);
        int[] arr = new int[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int)(Math.random() * 100 + 1);
        }
        System.out.println("排序之前的结果->" + Arrays.toString(arr));
        Arrays.sort(arr);
        System.out.println("排序之后的结果->" + Arrays.toString(arr));
    }
}

八、访问修饰符

访问修饰符
基本介绍
Java提供四种访问控制修饰符控制方法和属性(成员变量)的访问权限(范围):
1、公开级别:使用public修饰,对外开放
2、受保护级别:使用protected修饰,对子类和同一个包中的类公开
3、默认级别:没有修饰符号,向同一个包的类公开
4、私有级别:使用private修饰,只有类本身可以访问,不对外公开。

需要将这四种访问修饰符的访问范围记下来:
image
练习:无

九、访问修饰符的注意事项

使用的注意事项
1、修饰符可以用来修饰类中的属性,成员方法以及类。
2、只有默认的和public才能修饰类!并且遵循上述的访问权限的特点。
3、因为没有学习继承,因此在关于子类中的访问权限,讲完子类之后,回头讲解
4、成员方法的访问规则和属性完全一样
// com.hspedu.modifier:需要创建很多的文件来讲解A B Test类等

同类可以访问
image
image
的确能够访问
在同一个包中创建一个B类,然后分别访问public,protected,默认,private的,会发现private的不能访问到。
image
image
涉及到子类的这里不讲,到继承的时候讲解,因为涉及到子类的访问权限会牵扯到继承的知识点。
image
这个地方只能点出n1的public的
在不同包下可以访问public修饰的属性或者方法
,但是不能访问protected,默认,private修饰的属性和方法
image
同理可以修饰方法
image
而类只有默认的和public可以修饰类
image
这个是方法的同类
image
这个是方法的同包
image
这个是不同包
练习:无

十、封装的介绍

面向对象编程的三大特征:面向对象编程有三大特征->封装、继承、多态
封装的介绍:
封装encapsulation就是将抽象出来的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作。比如:对电视机的操作就是典型的封装。
打开电视和关闭电视,调节音量,更换节目等,封装成为一个方法(按钮),来对其进行操作。
封装带来的好处就是可以隐藏实现的细节,可以对数据进行验证,保证安全合理。
比如前面定义Person类的时候,我们直接通过对象点属性的方式访问到数据,直接将这个人的年龄更改成为10000都可以,这样是不会报错的,但是没有什么人活这么久。

posted @ 2025-05-06 15:41  请叫我虾  阅读(17)  评论(0)    收藏  举报