文章目录一瞥
Java基础课程概述
第一部分:编程语言核心结构
主要知识点:变量、基本语法、分支、循环、数组、 …
第二部分: Java面向对象的核心逻辑
主要知识点: OOP、封装、继承、多态、接口、 …
第三部分:开发Java SE高级应用程序
主要知识点:异常、集合、 I/O、多线程、反射机制、 网络编程、 ……
第四部分:实训项目
项目一:家庭收支记账软件
项目二:客户信息管理软件
项目三:开发团队人员调度软件
附加项目一:银行业务管理软件
附件项目二:单机考试管理软件
1.java中的数据类型:数据的单位
基本数据类型:程序里面自带的数据类型
布尔类型:boolean *:true/false
字符类型:char *: Unciode编码 -》 不区分中英文
统一的都是2个字节 = 16个位
取值范围:0-65535
char x = 'a';
char y = '男';
char z = 55;//范围:0-65535
整数类型:byte short int long -> int*
浮点类型:float double -> 小数 double*
重点:boolean char int/long double
boolean -> 判断
char -> 一个字、一个字母
int/long -> 整数
double -> 小数
2.基本数据类型之间的转换:
取值范围:小 -》 大
char
byte short int long float double
小的变大的 直接转变
int x = 45;
double y = x;
大的变小的 需要强转:
double x = 45.5;
int y = (int)x;
3.引用数据类型 程序员自己开发的数据类型
main:
创建对象:
Student stu = new Student();
对属性赋值:
stu.name = "张三";
stu.gender = '男';
stu.stuId = 12345;
stu.study();//学习
//char x = stu.showGender();
System.out.println(stu.showGender());
main:
Student stu = new Student();
System.out.println(stu.name.length());
class Student{
String name;//null
char gender;//
int stuId;//0
public void study(){
System.out.println("学习");
}
public char showGender(){
int x = 45;
return gender;
}
}
4.java中的变量:
分类:
成员变量 属性 实例变量:定义在类体里面
局部变量 自动变量:定义在方法体里面
区别:
1:定义的位置不同
2:作用范围不同
成员变量:依赖于对象存在
Student stu = new Student();//name gender stuId创建
局部变量:依赖于方法存在
stu.XXX();里面的局部变量创建
3:默认值不同:
成员变量:即使不赋值 也有默认值
局部变量:没有默认值 要求在使用之前必须先赋值
5.java中的分支/判断:
if else:*****
if(boolean判断){
执行语句;
}else if(boolean判断){
执行语句;
}else if(boolean判断){
执行语句;
}
if(x % 2 == 0){
return "偶数";
}else{
return "奇数";
}
-》
if(x % 2 == 0)
return "偶数";
return "奇数";
if(x % 2 == 0){
return true;
}else{
return false;
}
->
return x % 2 == 0;
只要两个学生的姓名一样就是为相等对象
public boolean equals(Object obj){
if(obj == null)return false;
if(!(obj instanceof Student))return false;
if(obj == this)return true;
return this.name.equals(((Student)obj).name));
}
=====================================
switch case:
switch(参数){
case XX : 执行语句;
case YY : 执行语句;
default : 执行语句;
}
参数只能传某几种数据类型:
jdk1.0 char byte short int
jdk5.0 enum
jdk7.0 String
System.out.println("请选择A/B/C/D");
Scanner sc = new Scanner(System.in);
String ABCD = sc.next();
switch(ABCD){
case "A" : 语法操作1;break;
case "B" : 语法操作1;break;
case "C" : 语法操作1;break;
case "D" : 语法操作1;break;
default : 语法操作1;
}
6.java中的循环:
for:
for(变量初始化;循环条件;循环之后的变化){
循环执行的代码
}
for(int x = 1;x <= 100;x++){
if(x % 8 == 0){
System.out.println(x);
}
}
while:
变量初始化;
while(循环条件){
执行语句;
循环之后的变化;
}
int x = 1;
while(x <= 100){
if(x % 8 == 0){
System.out.println(x);
}
x++;
}
do while:
int x = 1;
do{
if(x % 8 == 0){
System.out.println(x);
}
x++;
}while(x <= 100);
7.数组:
基本概念:数组是容器 装元素 类型相同 存储空间连续
int[] data = new int[5];//0 0 0 0 0
int[] data = new int[]{45,77,82,19,90};
int[] data = {56,77,28,99};
得到某一个元素:data[下标] 从0开始
得到数组大小:data.length
str.length()
list.size()
遍历数组:
for(int x = 0;x < data.length - 1;x++){
System.out.println(data[x]);
}
for(int x : data){
System.out.println(x);
}
数组的复制1:
int[] data = {56,77,28,99};
往数组里面添加元素:
int[] temp = new int[data.length+1];//0 0 0 0 0 0
System.arraycopy(data,0,temp,0,4);//56 77 28 99 0
temp[temp.length - 1] = 66;
data = temp;
数组的复制2:
int[] data = {44,55,66,77,88};
data = Arrays.copyOf(data,data.length+1);
数组排序:
自动排序:Arrays.sort(数组对象);
只能升序 import java.util.*;
手动排序 冒泡排序:
int[] data = {56,88,37,40,99};
for(int x = 0;x < data.length - 1;x++){//次数
for(int y = 0;y < data.length - 1;y++){//下标
if(data[y] > daya[y + 1]){
int z = data[y];
data[y] = data[y + 1];
data[y + 1] = z;
}
}
}
8.封装:用private修饰属性和方法
main:
Student stu = new Student();
//stu.name = "";
stu.setName("张三");
System.out.println(stu.getName());
class Student{
private String name;
//setter方法修改值
public void setName(String name){
this.name = name;
}
//getter方法得到值:
public String getName(){
return name;
}
}
9.继承:用extends实现两个类之间的is a的关系
共享代码
class Person{
String name;
int age;
char gender;
}
class Student extends Person{}
10多态:一个对象总有不同的类型去定义它
1:创建对象
Person x = new Student();
2:放在参数里面解耦
public void wc(Student stu){XXX}
public void wc(Teacher tea){XXX}
public void wc(Doctor x){XXX}
->
public void wc(Person x){}
-> Object类里面有一个方法判断两个对象能不能视为相等对象
1.equals(Object obj)
11.方法重载 Overload:
条件?
是否发生在同一个类体中
方法名是否一模一样
参数是否不同【类型不同 个数不同 顺序不同】
String:
substring(int 下标):该下标截取到最后
substring(int x,int y):从下标x截取到下标y-1
ArrayList:
remove(int 下标);
remove(Object 元素)
作用
同时满足用户的不同需求
12方法覆盖 Override
条件?
子类在继承得到父类的某些方法之后 不满意 在子类里面重新实现一下
子类权限 >= 父类权限
返回类型
jdk5.0之前 一模一样
jdk5.0开始 斜变返回类型
方法签名 一模一样
异常 <= 父类的异常
父类:
protected Object clone(){XXX}
子类:
public Object/Object子类 clone(){}
13.构造方法
每个类都有构造方法 我们不写 系统提供一个默认构造方法
//Student stu = new Student();
Student stu = new Student("张三",34);
stu.setAge(45);
class Student{
String name;
int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
//public Student(){}
}
构造方法的首行:
super():表示要执行本构造方法之前 先去执行父类的构造方法
class Father{
String name;
int age;
public Father(String name,int age){
this.name = name;
this.age = age;
}
public void showDay(){
System.out.println("吃饭");
System.out.println("看电视");
System.out.println("砍树");
}
}
class Son extends Father{
//name age
int stuId;
public Son(String name,int age,int stuId){
super(name,age);//只能放在构造方法的首行 共享父类构造方法的代码
this.stuId = stuId;
}
@Override
public void showDay(){
super.showDay();//放在普通方法里面任何一行 共享父类普通方法的代码
System.out.println("打游戏");
}
}
this():要执行本构造方法之前 先去执行本类的其他的构造方法
class Student{
String name;
int age;
int stuId;//成员变量
public Student(String name,int age){
this.name = name;
this.age = age;
}
public Student(String name,int age,int stuId){
this(name,age);//放在构造方法首行 共享本类其他构造方法的代码
this.stuId = stuId;
}
public void show(){
int stuId = 12345;//局部变量
System.out.println(stuId);
//this.表示当前调用该方法的对象 没有位置限制
System.out.println(this.stuId);
}
}
Java基础课程体系
第1章 Java语言概述
第2章 基本语法
第3章 数组
第4章 面向对象编程(上)
第5章 面向对象编程(中)
第6章 面向对象编程(下)
第7章 异常处理
第8章 枚举类&注解
第9章 Java集合
第10章 泛型
第11章 IO流
第12章 多线程
第13章 Java常用类
第14章 Java反射机制
第15章 网络编程
第16章 Lambda表达式与Stream API
第17章 Java 9 & 10 & 11新特性
第1章 Java语言概述
软件开发
软件,即一系列按照特定顺序组织的计算机数据和指令的集合。有系统软件和应用软件之分
人机交互方式
图形化界面(Graphical User Interface GUI)这种方式简单直观,使用者易于接受,容易上手操作。
命令行方式(Command Line Interface CLI): 需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令
常用的DOS命令
dir : 列出当前目录下的文件以及文件夹
md : 创建目录
rd : 删除目录
cd : 进入指定目录
cd… : 退回到上一级目录
cd: 退回到根目录
del : 删除文件
exit : 退出 dos 命令行
补充: echo javase>1.doc
是SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一门高级编程语言。
是一种面向Internet的编程语言。 Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。 这些Java程序被称为Java小程序(applet)。 applet使用现代的图形用户界面与Web用户进行交互。 applet内嵌在HTML代码中。
随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言,开发效率
Java技术体系平台
Java SE(Java Standard Edition)标准版
Java EE(Java Enterprise Edition)企业版
Java ME(Java Micro Edition)小型版
Java Card支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台
从Java的应用领域来分, Java语言的应用方向主要表现在以下几个方面:
• 企业级应用:主要指复杂的大企业的软件系统、各种类型的网站。 Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用。应用领域包括金融、电
信、交通、电子商务等。
• Android平台应用: Android应用程序使用Java语言编写。 Android开发水平的高低,很大程度上取决于Java语言核心能力是否扎实。
• 大数据平台开发:各类框架有Hadoop, spark, storm, flink等,就这类技术生态圈来讲,还有各种中间件如flume, kafka, sqoop等等 ,这些框架以及工具大多数是用Java编写而成,但提供诸如Java, scala, Python, R等各种语言API供编程。
• 移动领域应用:主要表现在消费和嵌入式领域, 是指在各种小型设备上的应用,包括手机、 PDA、机顶盒、汽车通信设备等。
java之父James Gosling团队在开发”Green”项目时,发现C缺少垃圾回收系统,还有可移植的安全性、 分布程序设计和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。
主要特征
• Java语言是易学的。 Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。
• Java语言是强制面向对象的。 Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
• Java语言是分布式的。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类
库,包括URL、 URLConnection、 Socket、 ServerSocket等。 Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
• Java语言是健壮的。 Java的强类型机制、异常处理、垃圾的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。
Java语言是安全的。 Java通常被用在网络环境中,为此, Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
• Java语言是体系结构中立的。 Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。
• Java语言是解释型的。 如前所述, Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统的解释器中运行。
• Java是性能略高的。 与那些解释型的高级脚本语言相比, Java的性能还是较优的。
• Java语言是原生支持多线程的。 在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建
1.4 Java语言运行机制及运行过程
特点一: 面向对象
两个基本概念:类、对象
三大特性:封装、继承、多态
特点二: 健壮性
吸收了C/C++语言的优点,但去掉了其影响程序健壮性的部分(如指针、内存的申请与
释放等),提供了一个相对安全的内存管理和访问机制
特点三: 跨平台性
跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。 “Write
once , Run Anywhere”
原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java
Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行
Java两种核心机制
Java虚拟机 (Java Virtal Machine)
垃圾收集机制 (Garbage Collection)
核心机制—垃圾回收
不再使用的内存空间应回收—— 垃圾回收。
- 在C/C++等语言中,由程序员负责回收无用内存。
- Java 语言消除了程序员回收无用内存空间的责任:它提供一种系统级线程跟踪存储空间的分配情况。并在JVM空闲时,检查并释放那些可被释放的存储空间。
垃圾回收在Java程序运行过程中自动进行,程序员无法精确控制和干预。
1.5 Java语言的环境搭建
明确什么是JDK, JRE
下载 JDK
安装 JDK
配置环境变量
path: windows系统执行命令时要搜寻的路径。
验证是否成功: javac java
选择合适的文本编辑器或 IDE 开发
JDK(Java Development Kit Java开发工具包)
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用在单独安装JRE了。
其中的开发工具:编译工具(javac.exe) 打包工具(jar.exe)等
JRE(Java Runtime Environment Java运行环境)
包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可
声明为public的类应与文件名一致,否知编译失败
public static void main(String[] args)
单行注释
格式: //注释文字
多行注释
格式: /* 注释文字 */
注:
对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
多行注释里面不允许有多行注释嵌套。
Java源文件以“java”为扩展名。源文件的基本组成部分是类(class), 如
本例中的HelloWorld类。
Java应用程序的执行入口是main()方法。它有固定的书写格式:
public static void main(String[] args) {…}
Java语言严格区分大小写。
Java方法由一条条语句构成,每个语句以“;”结束。
大括号都是成对出现的, 缺一不可。
一个源文件中最多只能有一个public类。其它类的个数不限,如果源文件包含
一个public类,则文件名必须按该类名命名。