JAVA中的关键字
public/private/protected/class
public 权限修饰符,不同包下,也可以使用
private 被private修饰的成员,只能在本类中进行访问,其他类是访问不了。
protected 权限修饰符 不同包下,只有子类可以使用
class 修饰类名
static
static
*static关键字是静态的意思,可以修饰【成员方法】,【成员变量】
*static修饰的特点
1.被类的所有 "对象" 共享
这也是我们判断是否使用静态关键字的条件
2.可以通过类名调用
当然,也可以通过对象名调用 //推荐使用类名调用
*几个问题
1.为什么用static修饰的称为静态?
因为它存在于内存中静态区
2.为什么推荐使用类名调用?
类名能调用: //推荐使用 原因是创建对象需要耗费内存资源
Student.university = "666";
对象名调用:
Student student = new Student();
student.university="666";
3.为什么static修饰成员变量会被所有的对象共享?
因为静态的成员变量不是存在于每一个对象中,而是存在于内存的静态区,所有的对象都指向它,也就共享了它
*static的访问特点
1.非静态(后人)的成员方法
能访问静态的成员变量
能访问非静态的成员变量
能访问静态的成员方法
能访问非静态的成员方法
2.静态(先人)的成员方法
能访问静态的成员变量
能访问静态的成员方法
3.静态中有没有this
没有
*总结:静态成员方法只能访问静态成员
静态是先出来的------------先人
非静态后出来的------------后人
静态只能访问静态 //先人只能使用先人的东西
非静态既可以访问静态、也可以访问非静态 //后人既可以使用先人的东西,也可以使用后人的东西
continue
continue
继续(结束本次循环,进入下次循环)
使用场景:只能在循环内使用。
在使用的时候,也是在循环内使用。需要满足某个条件
当满足之后会结束本次循环,进入下次循环
break
break
中断
使用场景:循环内
--> 在循环内执行到break之后,整个循环就结束了。
一般我们会在循环内,使用条件判断,当满足某个条件的时候,才执行break
final/finally
final
在继承中,父类有一个方法只想让子类去调用,但是不想让子类去重写,引出了final关键字
最终的意思,可以修饰变量、方法、类
特点
*变量:表明该变量是一个常量
常量:只能被赋值一次(默认初始化不算)
*方法:表明该方法不能被重写
*类:表明该类不能被继承
final修饰局部变量
*fianl修饰基本数据类型变量
final 修饰指的是基本类型的 "数据值" 不能发生改变
*final修饰引用数据类型变量
final 修饰指的是引用类型的 "地址值" 不能发生改变,但是地址里面的内容是可以发生改变的
举例:
Demo3 demo3 = new Demo3();
final int[] ints = {1,2,3};
ints[0]=100;
int[] ints1 = new int[10];
ints=ints1; //报错,因为ints的地址值不能改变
finally
最终必然会执行
return/false/true
*将对象或数返回作为返回值
*结束方法
false
*boolean 的一种种类
true
*boolean 的一种种类
this
this
用来区分:成员变量和局部变量。
通过this进行访问的都是成员。
this代表有本类产生的对象,谁来访问我,我就代表谁。
(1)请问this使用的位置在哪?
方法中 (☆☆☆☆☆)
举例:
public void setName(String name) {
this.name = name;
}
(2)this可以调用哪些东西?
*可以调用成员变量
局部变量行不行?
this.不能访问局部变量
*可以调用成员方法
public void show(){
System.out.println("show");
this.method();
System.out.println(this);
}
*可以调用构造方法
public Student() {
this(1);
}
(3)this指的到底是什么?
调用this所在方法的对象 (☆☆☆☆☆)
举例:
Student student = new Student();
student.show(); //student调用了包含this的show方法,所以this指的就是student对象
System.out.println(student);
(4)作用
调用成员变量的时候:是为了解决局部变量和成员变量同名的问题
调用成员方法:就是单纯的给出一个当前对象
super
super
代表父类存储空间的标识(可以理解为父类对象引用) //本质上并不是父类对象的引用
super 每一个人对象都有一个自己的父类空间标识
成员变量 : super.成员变量名
super.age;
成员方法: super.成员方法名();
super.method();
构造方法: super(参数)
super(1);
注意:super使用的前提:有继承关系 因为你使用super是去访问父类的信息,你必须先有一个父类
import/extends/implements
import 导包
extends 继承
implements 实现 (实现类必须重写所有方法)
interface/abstract/数据类型
interface 定义一个接口
abstract 修饰抽象类和抽象方法
数据类型 byte short int long char float double boolean
数据库关键字
DDL
DDL 用来定义数据库对象:数据库,表,列(字段)等。
关键字:create,drop,alter ........
Create
* 创建数据库:
* create database 数据库名称;
* 创建数据库,判断不存在,再创建:
* create database if not exists 数据库名称;
* 创建数据库,并指定字符集
* create database 数据库名称 character set 字符集名utf8;
* 练习: 创建db4数据库,判断是否存在,并制定字符集为gbk
* create database if not exists db4 character set gbk;
*创建指定字段的表格
*create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n //注意:最后一列,不需要加逗号
);
* 复制表:
* create table 表名 like 被复制的表名;
alter
*修改数据库的字符集
*alter database 数据库名称 character set 字符集名称;
*修改表名
*alter table 表名 rename to 新的表名;
*修改表的字符集
*alter table 表名 character set 字符集名称;
*添加一列
*alter table 表名 add 列名 数据类型;
*修改列名称 类型
*alter table 表名 change 列名 新列别 新数据类型;
*alter table 表名 modify 列名 新数据类型;
*删除列
*alter table 表名 drop 列名;
drop
*删除数据库
* drop database 数据库名称;
*判断数据库存在,存在再删除
* drop database if exists 数据库名称;
*删除表
* drop table 表名;
*判断表是否存在,存在再删除
* drop table if exists 表名 ;
select
* 查询当前正在使用的数据库名称
* select database();
show
*查询所有数据库的名称
*show database
*查询表
*show tables
*查询某个数据库的字符集:查询某个数据库的创建语句
*show create database 数据库名称;
use
* 使用数据库
* use 数据库名称;
desc
* 查询表结构
* desc 表名;
DML
DML 用来对数据库中表的数据进行增删改
关键字:insert, delete, update 等
insert
*给表中添加数据
* insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
* insert into 表名 values(值1,值2,...值n);
* insert into student(id,name,age) values(1, '金毛狮王', 38), (2, '紫衫龙王', 36);//批量添加
delete
*满足某些条件的情况下,删除相关数据
* delete from 表名 [where 条件]//不加where条件的话,将会删除整张表的数据
truncate
*先删除表,再创建一张一模一样的空表
*truncate table 表名;
update
*修改满足条件的数据
* update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];// 如果不加任何条件,则会将表中所有记录全部修改。
DQL
DQL 用来查询数据库中表的记录(数据)。
关键字:select, where 等
select
*从表中查询所有的数据
* select * from 表名;()
//语法:select 字段列表 from 表名列表 where 条件列表 group by 分组字段
//having 分组之后的条件 order by 排序 limit 分页限定
注意: group by 的后面不可以出现where,可以用having
* 多个字段的查询
*select 字段名1,字段名2... from 表名;
distinct
* 去除重复:
* select distinct * from 表名 ; //注意: 它是根据查询结果集中所有字段都相同才会去重
as
* 起别名:
* as:as也可以省略 注意: 空格可以代替as
聚合函数
count 计算个数/max/min/sum/avg
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(字段名))只包括列名那一列,在统计结果的时候,会忽略列值为空
(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
执行效率上:
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优。
max 最大值
min 最小值
sum 求和
avg 平均数
其他
like 模糊查询
in 在条件内
AND
or
not
null 空
! 非
=== 全等于
is
if
ASC 升序
DESC 降序
between...and 在...之间,是包含临界值的
limit
*分页查询
*limit 开始的索引,每页查询的条数
开始的索引 = (当前页码-1)*每页显示的条数
group by 分组字段
having 分组之后的条件
order by 排序