Java基础

一、Java编程入门

Java常识
  • Java主设计者James Gosling
  • 1995.5.23 Sun发布了Java1.0
  • Java EE JSP/Servlet
  • Java ME 游戏/通讯
  • Java SE 核心技术:面向对象/JVM/底层支持
  • Java源程序*.Java由编译器编译成*.class文件后,可以运行在任意系统的JVM
  • main程序是Java程序执行的入口点
  • JRE系统目录库:存放程序运行必须的系统库文件
  • 单行注释 //多行注释以 /* 开始 以 */ 结束
  • public 修饰的类名必须和 Java 文件名一致
  • Java 关键字严格区分大小写

二、Java 数据类型和运算符

Java 中的包、类方法、参数和变量的名字,可以由任意顺序的大小写字母、数字、下划线和美元符号开头。不能以数字开头,不能以Java的保留关键字开头变量名对应的是内存

类型 关键字
整数类型 byte、short、int、long
浮点类型 float、double
字符型 char
布尔型 boolea
类型 大小 范围
boolean 1字节8位有符号整数 true、false
byte 1字节8位有符号整数 -128 + 127
char 2字节16位Unicode字符 Unicode 0 ~ Unicode 216-1
short 2字节16位有符号整数 -32768(-215) ~ + 32767 (+215-1)
int 4字节32位有符号整数 -2147483648(-231) ~ + 2147483647(231-1)
long 8字节64位有符号整数 -263 ~ + 263-1
float 4字节32位浮点数 1.4E-45 ~ 3.4E+38、-1.4E-45 ~ -3.4E+38
double 8字节64位浮点数 4.9E-324 ~ 1.7E+308、-4.9E-324 ~ -1.7E+308
系统自动转换类型的时机
  • 两种类型兼容
  • 目标类型大于源类型
类型转换
  • 对于表达式,如果有一个类型为Double整个表达式自动提升为Double类型
  • 高进制转换为低进制需要强制转换int num = (int)10.2;
运算符
  • 算术运算符 + - * / % += -= /= *= %=
  • 关系运算符 > < == != >= <=
  • 逻辑运算符 && & || ! ^

三、流程控制

分支结构
  • if else / if else if else,当if或者else中有多条语句时,必须使用{}
  • switch 表达式必须为byte、short、int、longchar类型(因为前者可以转换为char类型,case后面常量必须各不相同
switch (表达式) {
    case '常量值 1':
        语句(组);
        break;
    case '常量值 2':
        语句(组);
        break;
    case '常量值 N';
        语句(组);
        break;
    default;
        语句(组);
}
循环结构
  • for(变量初始化;循环条件表达式;递增或递减的变量的值)
  • while先判断条件再执行(当型)
  • do while先执行再判断条件,至少可以执行一次(直到型循环)
循环中断
  • break强迫程序中断循环,离开循环体
  • continue语句之后的语句不再执行,跳出本次循环,进行下一次的循环
三目运算
  • 表达式 关系运算符 表达式 ? 值 : 值
  • num1 > num2 ? true:false
接受键盘输出
  • Scanner input = new Scanner(System.in);

四、面向对象编程(一)

基本概念
  • 类是一组具有相同特征和相同行为的对象的集合
  • 对象是实际存在该类事物的每个个体,也叫实例
  • 类名不可以使用 Java关键字,首字母可以为字母,也可以为"_"、"$"但是不推荐,不可以包含空格和小圆点
  • 类变量如果不赋值,都有各自的初始化值
  • boolean false,cahr null('/u0000'),数值型为0
  • 对象通过new关键字来实例化一个对象,对象名在栈内存中,对象在堆内存
通过构造方法可以初始化成员属性
private Integer eid;
private String ename;
public Emp (Integer eid,String ename) {
    this.eid = eid;
    this.ename = ename;
}
一些概念

this关键字表示类中的成员属性名,this关键字也可以调用本类中的其他构造方法,this表示的是当前的对象
构造方法名与类名相同,没有返回值
构造方法不是必须的,如果没有定义构造方法,在编译时JVM会默认创建一个无参的构造方法,如果自己定义了带参数的构造方法,JVM则不再定义不带参数的构造方法了
对象的比较,==比较的是内存地址是否一致,equals比较的是对象的值是否相等

五、面向对象编程(二)

面向对象的三大特性:封装,继承,多态
  • 封装:将成员变量声明为私有的(private),再提供一个或多个公有(public)setXX()getXX()方法实现对该成员变量的访问和修改。类中的私有成员变量成员方法只能在该类内部调用,不能通过该类的对象调用
  • 继承:一个类从另一个类派生出来的过程叫继承,被继承的类称为父类,执行继承的类称为子类,不允许多重继承。一个类如果没有extends任何类,则默认继承Object类,但是不继承父类的构造函数。extends实现继承,supper关键字实现调用父类方法
  • 多态:方法重写。方法名、参数、返回值类型都相同,方法中实现的具体操作不同。重写方法时,不能使用比父类中被重写的方法更底的访问权限。public->protected->default->private。继承只能为非private的变量与方法如果父类为private的,子类中同名、同参、同返回值类型的方法只相当于定义了一个新方法,与父类没有任何关系
方法重载
  • 在同一个类中方法名相同
  • 方法的参数类型或个数或顺序不同

五、面向对象编程(三)

静态与不可变
  • final的意思是最终不变的意思,final修饰过得变量变为常量,常量一般用大写。final声明的变量为常量,常量不可以修改,final声明的类不可以有子类,final声明的方法不可以重写
  • static 声明的属性,变量,方法为全局属性,多个对象共用一个内存空间。调用方法为 类名.方法名
main方法的理解
  • public static void main (String[] args) {}
  • public表示此方法可以被外部调用
  • static表示该方法可以由类名直接调用
  • void主方法是程序的起点,所以不需要任何返回值
  • String[] args 表示运行时的参数
包的命名规范和导入包
  • package命名一般是反顺序的类的创建者的域名
  • com.公司名.类名
  • import中使用*的警告。星号形式导包可能会增加编译时间,但对运行时间,性能和类的大小没有影响。如果引入的两个包中有同名类,编译器会保持沉默,除非你试图运行其中一个,否则给出一个编译时的错误
Java的四种访问权限
  • public公共的,可以被所有的类访问
  • protected受保护的,可以被本类,子类,同包下的类访问
  • default默认的/友好的可以被本类,同包下的类访问
  • private私有的,只能被本类访问,如果这个类的构造方法声明为private,则其他类不可以实例化该对象

七、抽象类及异常

抽象类定义
  • 抽象类:包含一个抽象方法的类称为抽象类
  • 抽象方法:只声明而为实现(没有方法体)的方法称为抽象方法,使用abstract关键字声明该方法
抽象类的使用规则:
  • 包含一个抽象方法的类必须是抽象类
  • 抽象类和抽象方法必须使用abstract关键字声明
  • 抽象方法只需要声明而不需要实现(没有方法体)
  • 抽象类必须被子类继承,子类必须重写抽象类中的抽象方法,如果不重写,该子类也必须声明为抽象类
  • 抽象类不能使用final修饰,因为final修饰的类不能被继承,而抽象类的作用就是用来被继承的
  • 抽象类中可以定义构造方法,也可以在子类中通过supper调用,但构造方法只用于子类的调用,因为抽象类不能被实例化
  • 抽象类也遵循单继承关系
接口:
  • 如果一个类全部是抽象方法和全局常量(static final),该类可以定义成一个接口
  • 子类可以通过implement关键字同时实现多个接口,用逗号隔开
  • 子类同时共享多个接口中的常量,且必须实现多个接口中的方法
  • 实现接口的子类也可以定义自己的属性或者方法
  • 一个接口不能继承另一个抽象类,因为继承抽象类后必须实现抽象类中的方法,但是接口中只能定义抽象方法,两者有冲突
  • 一个接口可以实现多个接口
异常:
  • 异常是导致程序中断运行的一种指令流
  • 软件和硬件错误都可能导致异常
  • 程序中的异常通常是指软件开发中的异常,而非硬件问题
  • Java中使用try catch来捕获,处理这些异常
  • 产生异常后,会立即产生一个异常类的实例化对象
  • try语句中对此异常对象进行捕捉
  • 产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码
  • 如果有finally语句,则最后执行finally语句中的内容
  • Throwable是所有例外类型的父类,不能直接被调用
  • Error表示编译时的系统错误,一般是和VM有关的严重问题,比如说内存溢出
  • Exception是程序中可以直接抛出的常见异常,又可以分为两类
  • RuntimeException是运行异常:它表示程序运行正常的话就不会发生这种问题,这种异常不用再程序中把他们列出来,运行时有问题,会自动被JVM抛出,比如:空指针异常,数组超出异常
  • 非运行时的异常:例如FileNotFoundExcepiton(文件未找到例外)Java编译器要求在程序中必须处理这种例外,捕获例外或声明抛弃例外
    如果在一个方法中生成了一个异常,但是并不知道该如何对着一异常进行处理,可以在方法声明时抛弃异常,使得例外对象可以从调用栈向后传播,直到有合适的方法捕获它为止
  • 方法名(参数)throws异常类型{//方法体}
  • 一个异常可以有多个catch

八、数组及常用类

  • 数组:是有相同类型的,用一个标识符名称封装到一起的一个对象序列或基本数据类型数据序列
  • 数组是一种最简单的复合数据类型,数组是一维的也可以是多维的
声明数组:
  • Integer[] number;
  • Integer number[];
  • 声明的时候不可以指定数组长度,只声明的数组是不能访问它的任何元素
  • new关键字为对象分配内存空间Integer number = new Integer[100];
通过引用来获取数组元素
  • number[0],number[1],...数组的取值范围是0 - number.length -1
  • x = null即数组对象不再被任何引用变量使用的时候,"垃圾回收器"将自动释放该内存资源
数组的静态初始化
  • Integer number[] = {1,2,3,4,.....};
  • Integer number[] = new Integer[] {1,2,3,4,....};
动态初始化
  • Integer number[];``number = new Integer[5];
使用时要注意的问题
  • 只声明没有初始化的时候直接使用该变量会导致空指针异常
  • 数组越界异常,取值范围大于等于数组长度时,length属性表示数组的长度
多维数组
  • Java没有真正的多维数组,只有数组的数组
  • Java语言中把二维数组看做是数组中的数组,数组的空间不是连续分配的,所以不要求二维数组的每一维的大小相同
  • Integer number[][] = {{1,2,3},{4,5},{6,7,8,9,0}};
二维数组的定义
  • Integer number [][];
  • Integer[][] number;
  • Integer number[][] = new Integer[2][3];
  • Integer[][] number = {{1,2,3},{4,5,6}};
动态初始化
  • Integer[][] number = new Integer[3][];//指定一个3行n列的数组
  • number[0] = new Integer[100];//指定第一行为100列
  • number[1] = new Integer[200];//指定第二行为200列
  • number[2] = new Integer[300];//指定第三行为300列
  • 在Java语言中,必须首先为最高维的分配引用空间,然后再顺次为低维分配空间
  • 声明数组:是在栈内存中声明的
  • 为数组开辟空间:是使用关键字new在堆内存中完成的
  • Java中数组是对象,不是基本数据类型
Java.util.Arrays类:
  • 提供了用来操作数组的一些方法(排序,搜索)
  • 类中的方法都是静态的,可以直接调用
String类:
  • String类时final的,一旦创建了就不能修改,因此对于String对象的各种操作都是生成了一个新的String对象
StringBuffer类:
  • 当频繁修改字符串内容时建议使用该类,提供了与String类似的方法

九、常用集合类

ArraayList类
  • ArrayList类是List接口的实现类
  • ArrayListJDK1.2才出现的,属于线程不安全的类,速度快,异步处理方式
Vector类
  • Vector类与ArrayList类提供的功能是一样的
  • Vector类是JDK1.0开始就存在的,属于线程安全的类,速度慢,同步处理方式
HashMap类
  • 是以键值对的方式存放数据的
  • key不允许重复,key value允许为空,key如果重复,新的value会替换旧的value
  • 集合中存放的数据是无序的,存放数据是非线程安全的

十、JDBC 编程(上)

  • JDBC是Java链接数据库并且进行数据操作的技术
  • JDBC工具包可以让编程人员在Java程序中直接使用结构化查询语言,即sql,连接到一个数据库,对数据库进行查询,更新
  • JDBC是标准化地将关系型数据库操作和Java程序集成到一起,可以直接对数据库进行访问和修改的API。
  • JDBC现在可以连接的数据库包括:Oracle,Sql Server,MySQL,DB2,Informix以及Sybase
JDBC 的流程

创建数据库链接==>向数据库发送SQL语句==>操作处理返回的结果

用于JDBC编程的类
  • Java.sql.*:提供用于访问和处理存储在数据源中数据的API,包含不同驱动进行数据库访问方法的框架设计
  • Javax.sql.*:提供在程序中访问和处理数据源的API该包中类实现了Java.sql
链接数据库实现步骤
  • 将数据库驱动jar包导入到项目中
  • 导入必须的类Java.sql.DriverManager;Java.sql.Connection
  • 加载驱动
  • 创建链接
在程序中加载驱动
  • 使用Class.forName();方法加载
创建数据库的链接
  • static Connection getConnection(String url,String user,String password);
  • 连接到指定URL的数据库,user用户名,password密码
JDBC URL的标准语法
  • jdbc:sqlserver://127.0.0.1:1433;DatabaseName=demodb
  • <protocol>:<subprotocol>:<data sourceinfo>
  • 主要通讯协议:次要通讯协议,即驱动程序的名字:数据来源
执行SQL操作
  • 可以通过调用Connection对象的createStatement()方法来建立一个新的陈述对象
  • Statement stat = conn.createStatement();
  • stat.execute("create table Emp(ename varchar(20))");
在数据库中建立一张表
  • stat.execute("insert into emp values('张三')");
在数据库中插入一条记录
  • ResultSet result = stat.executeQuery("select * from emp");
查询记录
  • 查询出来的记录都在ResultSet结果集中
  • 结果集中包含一个游标(指针),默认指向第一条记录上(下标从1开始,而不是0),游标可以向下移动来获取数据
  • String ename = getString(1);

十一、JDBC编程(下)

  • PreparedStatement接口
  • PreparedStatement对象可以执行已经预编译的sql语句,其sql执行效率比Statement的执行效率更高
  • 可以在执行过程中向该对象中的sql语句传递参数
  • 对于sql中每个输入参数都保留一个问号"?"作为占位符
  • 每个占位符的值必须在该语句执行前赋值
  • PreparedStatement是通过继承Statement实现的
创建PreparedStatement对象
  • String slq = "update emp set ename = ? where eid = ?";
  • PreparedStatement ps = con.PreparedStatement(sql);
传递参数
  • 执行PreparedStatement对象之前要为每个?赋值
  • 调用PreparedStatement对象的Set...()方法来完成
  • 参数的下标从1开始,而不是0,和sql语句中的?一一对应
  • ps.setString(1,"张三");
  • ps.setInt(2,1);
执行语句
  • ps.executeUpdate();
  • ps.executeQuery
  • ps中设置的sql语句没有被其他sql语句覆盖的话,可以反复执行
  • 传递另一个sql语句给同一个陈述对象,则新的sql语句覆盖已经存在的sql语句ps.con.prepareStatement(sql2);
  • 清除PreparedStatement对象中的sql语句con.clearParameters();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容