-
import引入语句
2015-10-19 17:16:13在Java中,若想利用包的特性,可使用引入(import)语句告诉编译器要使用的类所在的位置。实际上,包名也是类名的一部分。例如,如果abc.Student包中含有Gui类,则该类可称作abc.Student.Gui。如果使用了import语句...在Java中,若想利用包的特性,可使用引入(import)语句告诉编译器要使用的类所在的位置。实际上,包名也是类名的一部分。例如,如果abc.Student包中含有Gui类,则该类可称作abc.Student.Gui。如果使用了import语句,再使用类时,包名可省略,只用Gui来指明该类。
1、使用格式
import pkgl[.pkg2[.pkg3…]].(类名I g-);
假设有一个包a,在a中的一个文件内定义了两个类XX和YY,其格式如下:
package a;
class XX{}
class YY{}当在另外一个包b中的文件ZZ.java中使用a中的类时,语句形式如下:
package b;
import a.*;
class ZZ extends XX {}在ZZ.java中,因引入了包a中的所有类,所以使用起来就好像是在同一个包中一样。
在程序中,可以引用包的所有类或若干类。引用所有类时,可使用通配符“*”。引入整个包时,可以方便地访问包中的每一个类,但会占用过多的内存空间,代码下载的时间将会延长,因此在了解包的基本内容后,实际要用到哪个类就引用哪个类,尽量不造成资源的浪费。
实际上,程序中不一定要有引用语句。当引用某个类的类与被引用的类存储在同一物理目录下时,就可以直接使用被引用的类。
2、分类
单类型导入:import java.io.File;
按需求类型导入:import java.io.*; 对于按需类型导入,有人误解为导入一个包下的所有类,其实不然,看名字就知道,他只会按需导入,也就是说它并非导入整个包,而仅仅导入当前类需要使用的类。
注:单类型导入和按需类型导入对类文件的定位算法是不一样的。java编译器会从启动目录(bootstrap),扩展目录(extension)和用户类路径下去定位需要导入的类,而这些目录仅仅是给出了类的顶层目录。编译器的类文件定位方法大致可以理解为如下公式:
顶层路径名 \ 包名 \ 文件名.class = 绝对路径
对于单类型导入很简单,因为包明和文件名都已经确定,所以可以一次性查找定位。
对于按需类型导入则比较复杂,编译器会把包名和文件名进行排列组合,然后对所有的可能性进行类文件查找定位。例如:
package com;
import java.io.*;
import java.util.*;
-
引入jar包操作数据库与连接池
2018-03-23 21:20:31commons-dbutils-1.6.jar 1.commons-dbutils-1.6.jar 操作JDBC连接数据库 并且执行sql语句 处理返回的结果集 三个核心类 ... 参数: ResultSetHandler是接口(使用它的实现类 想要什么结果集 就...commons-dbutils-1.6.jar
1.commons-dbutils-1.6.jar 操作JDBC连接数据库 并且执行sql语句 处理返回的结果集 三个核心类 DbUtils: 关闭资源的方法(安静的关闭 不用异常处理) QueryRunner: 执行sql语句 并且返回你想要的结果集 参数: ResultSetHandler是接口(使用它的实现类 想要什么结果集 就传入什么该类的接口) // 插入数据 private static void insert() throw SQLException{ // 插入一条数据使用QueryRunner QueryRunner qr = new QueryRunner(); // 获取连接 (JDBCUtil是自己写好的创建连接和关闭资源的工具类) Connection connection = JDBCUtil.getConnection(); String sql = "insert into sort values (null, '显示器', 5,'这是一台显示器'); // 插入数据 int row = qr.update(connection.sql); if(row > 0){ System.out.println("插入成功"); } // 安静的关闭资源 DbUtil.closeQuietly(connection); } // 修改数据 private static void update() throw SQLException{ QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); // 使用占位符传入sql语句 String sql = "update sort set sname=?, sprice=?, sdesc=? where sid=5"; // 多参数传参 方式1 利用数组传 // 方式2 直接传递参数 注意要和占位符号的顺序 对应 Object[] params = {"咖啡",1000,"java里的咖啡"}; int row = qr.update(connection, sql, "咖啡1",2000,"java里的咖啡"); if (row > 0) { System.out.println("修改成功"); } DbUtils.closeQuietly(connection); }
2.使用QueryRunner进行查询操作 给QueryRunner传入的参数不同 返回的结果集也不同 @Test public void select1() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; // 调用查询方法 // 传入什么内容 该类就把数据放到什么容器中 给你返回 Object[] objects = qr.query(connection, sql, new ArrayHandler()); for (Object object : objects) { System.out.println(object); } DbUtils.closeQuietly(connection); } /* * ArrayListhandler * 查询每一条记录 放到List集合中 * 每一条记录是一个对象数组 */ @Test public void select2() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; List<Object[]> list = qr.query(connection, sql, new ArrayListHandler()); for (Object[] objects : list) { for (Object object : objects) { System.out.println(object); } System.out.println(); } DbUtils.closeQuietly(connection); } /* * BeanHandler * 把结果集的第一行 封装成一个JavaBean对象 * JavaBean对象规则 * 1.成员变量私有化 * 2.提供空参的构造方法 * 3.提供set/get方法 * 符合以上规则的实体类创建出来的对象 就是一个JavaBean对象 * */ @Test public void select3() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; // 要把使用哪个javabean实体类 传进去 // 类名.class Sort sort = qr.query(connection, sql, new BeanHandler<>(Sort.class)); if (sort == null) { System.out.println("没有该数据"); } System.out.println(sort); DbUtils.closeQuietly(connection); } /* * BeanListHandler * 返回全部数据 */ @Test public void select4() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; List<Sort> list = qr.query(connection, sql, new BeanListHandler<>(Sort.class)); for (Sort sort : list) { System.out.println(sort); } DbUtils.closeQuietly(connection); } /* * ColumnListHandler * 返回指定列的数据 放在list中返回 */ @Test public void select5() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; List<String> list = qr.query(connection, sql, new ColumnListHandler<String>("sname")); for (String string : list) { System.out.println(string); } DbUtils.closeQuietly(connection); } /* * ScalarHandler * 只返回一个结果 多用于sql语句的聚合查询 */ @Test public void select6() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select avg(sid) from sort"; BigDecimal query = qr.query(connection, sql, new ScalarHandler<BigDecimal>()); System.out.println(query); DbUtils.closeQuietly(connection); } /* * MapHandler * 将第一条数据存放在map中 以键值对的形式 键:列名 值: 列值 */ @Test public void select7() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; Map<String, Object> map = qr.query(connection, sql, new MapHandler()); for (String key : map.keySet() ) { System.out.println(key + " " + map.get(key)); } DbUtils.closeQuietly(connection); } /* * MapListHandler * 返回全部数据 将存有数据的map存到list中 在返回去 */ @Test public void select8() throws SQLException { QueryRunner qr = new QueryRunner(); Connection connection = JDBCUtil.getConnection(); String sql = "select * from sort"; List<Map<String,Object>> list = qr.query(connection, sql, new MapListHandler()); for (Map<String, Object> map : list) { for (String key : map.keySet()) { System.out.println(key + " " + map.get(key)); } } DbUtils.closeQuietly(connection); } }
连接池
java为了解决频繁创建数据库连接和释放数据库连接的问题 使用数据库连接池来解决 并且出了一套规范 数据库连接规范(接口) javax.sql.DataSource java扩展包 由数据库厂商来提供的 常用数据库连接池 DBCP C3P0 需要导入的jia包(dbcp中依赖pool jia包种的类) commons-dbcp-1.4.jar commons-pool-1.5.6.jar BasicDataSource 是 DataSource(规范类) 的实现类 基础设置 (要使用数据库连接池 必须要设置的内容) mysql驱动类 com.mysql.jdbc.Driver 访问数据库连接地址 数据库访问用户名 和 密码 public class DataSourceUtil { private static BasicDataSource dataSource = new BasicDataSource(); static { // 设置dataSource // mysql的驱动类的权限定类名 dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc"); dataSource.setUsername("root"); dataSource.setPassword("123456"); // 扩展设置 // 初始化连接数 dataSource.setInitialSize(10); // 最大活动数 dataSource.setMaxActive(8); // 最大空闲连接数 dataSource.setMaxIdle(5); // 最小空闲连接数 dataSource.setMinIdle(2); } // 获取数据库连接池方法 public static DataSource getDataSource() { return dataSource; } } // 测试DataSourceUtil类 public static void main(String[] args) throws SQLException { // 数据库连接池和QueryRunner结合使用 QueryRunner qr = new QueryRunner(DataSourceUtil.getDataSource()); // 插入一条数据 String sql = "insert into sort values (null, ?, ?, ?)"; Object[] params = {"试卷", 10, "一份万分试卷"}; int row = qr.update(sql, params); if (row > 0) { System.out.println("插入成功"); } }
-
from pil import image找不到指定模块_有节制地使用from...import语句
2021-01-13 20:21:16Python导入包的机制辨析~在Python中有3种方法可以引入外部模块:import语句from ... import ...语句__import__函数使用import的注意事项优先使用import xxx的形式有节制地使用from xxx import yyy的形式避免使用from ...Python导入包的机制辨析~
在Python中有3种方法可以引入外部模块:
- import语句
- from ... import ...语句
- __import__函数
使用import的注意事项
- 优先使用import xxx的形式
- 有节制地使用from xxx import yyy的形式
- 避免使用from xxx import *的形式
为什么要这样来建议,我们可以从Python如何导入模块来分析。
Python导入模块的机制
在初始化运行环境的时候Python解释器会自动加载一些内建模块,可以通过sys.modules.items()函数查看预加载模块的信息。
当用户加载模块时会发生以下过程:
- 1)在sys.modules中进行搜索看看该模块是否已经存在,如果存在,则将其导入到当前局部命名空间,加载结束。
- 2)如果在sys.modules中找不到对应模块的名称,则为需要导入的模块创建一个字典对象,并将该对象信息插入sys.modules中。
- 3)加载前确认是否需要对模块对应的文件进行编译,如果需要则先进行编译。
- 4)执行动态加载,在当前模块的命名空间中执行编译后的字节码,并将其中所有的对象放入模块对应的字典中。
无节制使用from ... import带来的问题
(1) 命名空间冲突
由于from ... import会将导入的名字引入当前命名空间,在项目中,特别是大型项目中频繁地使用from a import ...会增加命名空间冲突的概率。
(2) 循环嵌套导入的问题
如果两个模块相互导入,在使用from ... import时就可能带来循环嵌套导入的问题,例如:
m1.py:from m2 import x2def x1(): passm2.py:from m1 import x1def x2(): pass
导入上面任何一个文件都会抛出ImportError异常。在导入m1时,遇到语句from m2 import x2,此时m2不存在与于sys.modules中,因此此时转到导入m2.py文件。然后导入m2.py时,遇到语句from m1 import x1,此时m1已经在sys.module中存在,但是在字典中找x1,但是由于m1.py的导入之前并未完成,还没有x1,于是解释器便会抛出ImportError: cannot import name x1异常。直接使用import就没有这个问题。
欢迎大家关注小编~
-
4.11 import 语句
2017-11-24 13:48:18如果一个类想要使用的类不和它在一个包中,那么就需要import语句来帮助完成使命 4.11.1 引入类库中的类 用户需要类库中的类就必须使用import语句 一些重要包中的类 Java.lang 包含所有的基本语言...4.11 import 语句
如果一个类想要使用的类不和它在一个包中,那么就需要import语句来帮助完成使命
4.11.1 引入类库中的类
用户需要类库中的类就必须使用import语句
一些重要包中的类 Java.lang 包含所有的基本语言类 Java.swing 包含抽象窗口工具集中的图形、文本、窗口GUI类 Java.io 包含所有输入、输出类 Java.util 包含实用类 Java.sql 包含操作数据库的类 Java.net 包含所有实现网络功能的类 若要引用一个包中的全部类,可以使用通配符(*)来代替
例子:import Java.util.*
4.11.2 引入自定义包中的类(略)
-
gradle打包web jar_如何使用Gradle打包一个可运行的jar
2020-12-20 02:09:00在使用Gradle打包成一个可运行的Jar包的时候,需要把编译时依赖的库也打包进去,因此要搞清楚打包时如何才能将库文件打包进去。对于implementation引入的库,则需要如下的语句:from {configurations.runtime... -
java基础之java输入输出语句
2020-12-10 17:36:14使用时需要引入包importjava.util.Scanner;首先定义Scanner对象 Java基础学习:java输入输出语句 比如: Java基础学习:java输入输出语句 2、使用BufferedReader 用前需要引入importjava.io.Reader; Java基础学习... -
java键盘输入语句_java的输入语句小结
2021-02-12 11:15:211.使用Scanner使用时需要引入包import java.util.Scanner;首先定义Scanner对象Scanner sc = new Scanner(System.in);如果要输入整数,则 int n = sc.nextInt();String类型的,则String temp = sc.next();比如:... -
java的输入语句总结_JAVA和c语言
2020-09-13 14:22:36使用Scanner 使用时需要引入包import java.util.Scanner;首先定义Scanner对象 Scanner sc = new Scanner(System.in; 如果要输入整数则 int n = sc.nextInt; String类型的则String temp = sc.next;资料个人收集整理勿... -
Python 编程要点 -- with语句
2017-06-26 18:47:16with语句 With 语句是在Python2.5版本开始引入的,... 要使用with语句,必须要明白上下文管理器这一概念。 上下文管理协议: 包含方法__enter__() 和 __exit__(),支持该协议的对象要实现这两个方法。 上下文管理器: -
MYSQL查询语句9.联合查询
2020-06-20 23:22:11要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时 特点:★ 1、要求多条查询语句的查询列数是一致的! 2、要求多条查询语句的查询的每一列的类型和顺序最好一致 3、union关键字默认去重,... -
JS中异常捕获try-catch语句
2018-03-08 00:13:44ECMA-262第三版引入了try-catch...即要把所有可能抛出错误的代码都放在try语句块中,如果发生异常,catch语句块就会接收到一个包含错误信息的对象,即使不需要使用这个对象,也必须声明它,如上述代码中的error一... -
Jsp中引入标签
2011-03-31 13:58:19在jsp文件中使用c标签的时候一定要先引入,首先先将这个jar包(jstl.jar和standard.jar)复制到WEB-INF/lib文件夹中,然后再jsp文件中写入应用的语句 这样就可以使用C标签进行操作了。... -
thinkphp5引入sdk
2017-09-06 11:45:41要引入的sdk是金山云sdk。1、修改应用入口文件index.phpdefine('VENDOR_PATH', __DIR__ .'/vendor/');增加一行定义vendor目录路径的语句,这个依照自己的具体路径定义。2、将sdk包放到vendor目录下,具体路径为... -
【Java入门学习笔记】——第六天 import语句,类的访问控制权限问题,对象数组
2020-03-05 15:41:06Q:怎样使用import语句? A:import语句的作用如下: 1.引入类库中的类 2.引入自定义包中的类 需要把程序使用的自定义的包名所形成的...--Example01(所有包名形成的目录都要放在Example01中) --student --... -
java的输入语句小结
2015-06-29 21:01:59原文地址:... 1.使用Scanner 使用时需要引入包importjava.util.Scanner;首先定义Scanner对象 Scanner sc = new Scanner(System.in); 如果要输入整数,则 int n = sc.nextInt(); Str -
python怎么复制上面的语句_[语句摘要]复制Python的三种方法,总结,拷贝,方式
2021-02-10 12:15:59在练习列表的操作的时候我发现赋值之后的列表会随着被赋值的列表改变而改变,就像是C语言中用指向同一实际变量的指针进行操作一样。这是因为Python中有三种拷贝方式:浅拷贝...记得在使用深拷贝的时候要引入copy包。... -
11.4 Python __import__()函数引入模块名
2021-02-08 19:43:24但这和 Python 语法相矛盾,换句话说,Python 是以空格来隔离一行语句中的不同元素的,如果模块名中出现空格,就无法再使用 import 引入。 例如,我们自定义一个模块,并起名为 “demo text.py”,该模块中只包含... -
Java常用包
2019-09-30 20:11:17要使用这个包中的类,可以不用 import 语句来显式引用。在默认情况下,编译器会将这个包自动引入任何 Java 程序中,所以这个包中的类可以直接在程序中使用。 2.java.net 包含执行网络相关的操作的类。 3.java.io ... -
包与访问权限
2020-07-14 18:05:00Import 引入包(引入一个没有在同一个包中的 CLASS文件) ①java.lang包下的类不需要引包(Object;String;System) ②所使用的类同一个包下不需要引包; 具体步骤: 方法①:先直接调用,代报错时,鼠标放上去,选择... -
php文件require()引入注意事项
2016-04-26 22:03:52因此,可以使用任何扩展名来命名包含文件,但要遵循一个约定,例如将扩展名命名为.inc或.php是一个很好的办法。 若不用.php扩展名命名,需要将待引入文件放置于文档树之外,避免用户在浏览器中直接载入后以文本形式... -
java的输入语句小结(自己总结)
2014-09-24 11:21:49使用时需要引入包import java.util.Scanner;首先定义Scanner对象 Scanner sc = new Scanner(System.in); 如果要输入整数,则 int n = sc.nextInt(); String类型的,则String temp = sc.next(); 比如... -
JAVA注解应用之合成数据库查询语句
2017-07-24 14:33:45在使用注解之前,程序源数据只是通过java注释和javadoc,但是注解提供的功能要远远超过这些。注解不仅包含了元数据,它还可以作用于程序运行过程中、注解解释器可以通过注解决定程序的执行顺序使用注解来以及反射来... -
#include 和#include两个语句一样吗?
2007-09-05 22:22:00标准 C++引入了名字空间的概念,并把iostream等标准库中的东东封装到了std名字空间中,同时为了不与原来的头文件混淆,规定标准C++使用一套新 的头文件,这套头文件的文件名后不加.h扩展名,如iostream、string等等... -
jar包搜寻机制
2016-01-06 10:01:44在类前部,我们都会使用import引入后续需要的类或包。 然而对于只使用了jdk或者tomcat中的jar包或者其中类的自定义类,搜寻过程如下: Java类的搜索路径 Java程序运行时要导入相应的类,也就是加载 .class 文件的... -
实现一个类似Webpack的基础打包工具
2019-09-17 11:06:39文章目录引入步骤简述具体实现分析文件源码解析...浏览器中引入一个JS文件,如果文件中有使用import语句进行模块的引入,浏览器是会报错的。 那么我们要实现的这个基础的打包工具也就是用来解决这个问题的。 步骤... -
java学习:包
2011-11-27 20:49:24在了解了继承、多态的基础知识后,开始学习java的包 为了便于管理大型软件系统中数目众多的类,解决类命名冲突的问题,java引入了包的概念。java中的包和文件系统中的目录差不多,在...要注意的是packeage语句如
-
湖南大学《线性代数》3套模拟试卷.pdf
-
华南理工大学《电路基础》多套期末考试试卷(含答案).pdf
-
centos7禁用ipv6
-
day2——JavaEE and Linux
-
MySQL NDB Cluster 负载均衡和高可用集群
-
安装rabbitmq 3.7.6
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
湖南大学《计算机操作实践》10套期末考试试卷.pdf
-
华东交通大学《研究生英语》期末考试试卷.pdf
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
http与https的区别
-
C#设置自定义文件图标实现双击启动(修改注册表)
-
Unity RUST 逆向安全开发
-
LeetCode 304. 二维区域和检索 - 矩阵不可变
-
E70-433T30S_UserManual_CN_v1.6.pdf
-
湖南大学《C语言》期末复习5套试卷.pdf
-
牛牛量化策略交易
-
河北工业大学《建筑力学》期末考试试卷.pdf
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理
-
华南理工大学《工程电磁场》期末复习题(含答案).pdf