本帖最后由 qlcyl110 于 2017-3-14 21:50 编辑
自学习java到今天42天时间。现将学习笔记分享如下;
3-14;java基础语法+面向对象笔记全部
[Java] 纯文本查看 复制代码 /* 环境配置目的:主要是在任何位置都能使用Java
1、 Java的配置方法
系统——属性——高级——环境变量
新建JAVA_HOME系统变量 值为Java目录内bin的上一级。比如:H:\JAVA7
再去path内添加JAVA_HOME的值。方法为:%JAVA_HOME%\bin:
好处在于以后Java版本的变化可以直接调整系统变量JAVA_HOME内的值。
避免混淆和不小心的操作导致path内值的变化。
2、 JAVA安装成功的检测方法
徽标键+R 在运行窗口输入cmd
找到安装JAVA的位置,进入bin文件夹(进入文件夹方法:cd 文件名)
运行Javac。出来一堆文件说明安装成功。
3、 Java的源文件后缀名字为.java
Java的运行文件后缀名为.class
4、 Java语言
class:类,Java当中组织代码的基本单位
HelloWorld: 类名,可自定义 每一个语言的第一个案例为输出“Hello World”为主
public: 访问权限修饰符,现为固定写法
static:静态修饰符,现为固定写法
void: 返回值类型,现在为固定写法
main: 方法名,现在为固定写法 永远都是main方法调用其他方法;所用程序开始是从main方法开始;
其他方法调用main方法没有意义;
String:参数类型,现在为固定写法
args:参数名,可以自定义修改,建议固定写为args
当看到一个数值的时候要考虑两点,这个数值本身和这个数的数据类型;
当看到方法时,要看到方法名、参数类型、返回值类型
5、 运算符:就是针对常量或变量进行运算的符号
包括:算术运算符、赋值运算符、比较运算符、逻辑运算符 三元运算符
算数运算符: +: 数学上的加法 连接字符串与其他类型
++前置;先产生副作用再使用
++后置;先使用后产生副作用
-: 数学上的减法
--前置;先产生副作用再使用
--后置;先使用后产生副作用
*: 数学上的乘法
/: 整数整除(取整数商部分)
%: 整数取商(取余数部分)为数字5上的百分号
字符串+变量+变量;先算字符串+变量,再+变量计算。
如果要先进行变量+变量运算可添加括号运算。
还可以将模式写成,变量+变量+字符串,这样先进行的事变量相加而后在加字符串
赋值运算符:给变量赋值的运算符 “=”
=;给变量赋值
+=;给变量赋值加等号右边数值
-=;给变量赋值减等号右边数值
*=;给变量赋值乘等号右边数值
/=;给变量赋值乘等号右边数值
%=;给变量赋值取模等号右边数值
在Java中判断两个数据是否相等使用“==”双等号
例;int a = 10;
a = a + 1 可写成 a += 1 这样写可以减少数学计算危险
比较运算符;> < >= <= == !=
比较运算符的结果一定是布尔值
逻辑运算符:用来处理布尔值的逻辑关系
短路与&&;有假则假
短路或||;有真则真
逻辑非!(英文叹号);取反
三元运算符;使用格式;
(条件表达式)?表达式1:表达式2;
使用规则;
1、判断条件表达式为一个布尔值类型;
2、true;运算结果为表达式1;
3、false;运算结果为表达式2;
三元运算符最后一定有一个值。
6、 编程分析习惯
结构层次分析、数据类型分析、逻辑分析
7、 引用数据类型
Scanner是一种引用数据类型。主要用于键盘录入
定义引用数据类型的变量,并赋值;
数据类型 变量名 = new 数据类型();
调用方法;
变量名.方法名();
Scanner使用步骤;
导包;
import java.util.Scanner;
创建对象实例;
Scanner sc = new Scanner(System.in);
调用方法;
int 变量名 = sc.nextInt(); 录入数字
String 变量名 = sc.next(); 录入文字(截止回车与空格前)
String 变量名 = sc.nextLine(); 录入一行字符串
8、数据类型显示;
int 整数型
double 小数类型
int[] 数组整数类型;
double 数组小数类型; //数组类型与数据类型是相等的。 重点;
9、String 常用引用数据类型、特殊变量并赋值。
格式;
String s = "内容";
length 获取该字符串的长度 例子:int a = s.length(); 长度一般为整数
substring 通过索引截取子字符串 包头不包尾
例子;String b = s.substring(0,4)+"...";
10、Math 是特殊的数字引用类型。可以直接Math.方法名
round 是四舍五入方法名
11、强制类型转换;只适用于数字
格式;转换后类型 变量名 = (转换后类型)转换前数值;
12、if语句是比三元运算符更好用的比较运算方法
if 语句格式;
单条件判断;
if(条件){
}
互斥条件判断; 一定有一个结果!
if(条件){
}else{
}
多条件判断;
if(条件){
}else if(条件){
}else if(条件){
}else if(条件){
}else
注意事项;
1、 单条件使用if/else语句是后边的大括号可以省略;
2、 多条件语句,不可以重复区间;
3、 if语句确定变量使用区域。在if外的可以在if内使用,但在if内的不能被使用;
此语句可以进一步验证“Java编译时只检查语法错误,不检查变量值”
4、 三元运算符与if语句不同在于,
三元运算符必然产生一个数值,该数值一定被运用。
if语句可以产生数值,也可以不产生,仅完成业务逻辑。如打印。
Random类内
1、导包 import Java.util.Random{}
2、创建对象 new Random();
3、变量名.方法名(); 方法名分为;nextInt(确定随机数最大从零到X); nextDouble();0到1之间的数字
13、Fof循环格式
for(初始表达式1;布尔表达式2;步进表达式4){
循环体逻辑3;
}
break中断循环
不可以单独使用,只能放在循环里使用;
直接在循环中bradk即可。
for循环语句的注意事项;
1、1234四个部分均可以为空;
1为空时,注意变量的作用域的范围变化。不放在1处,肯定在for语句上一级放;
2为空时,为条件永远为true的死循环;
3为空时,通常没有意义,因为循环体为3,所以没有循环体就没有意义;
4为空时,注意步进表达式的位置,可以加入循环体内使用。或同样出现死循环;
2、初始化表达式1与步进表达式4可以同时定义多个变量。控制循环条件。
14、while 循环格式
初始化表达式1
while(布尔表达式2){
循环体3
步进表达式4
}
while注意事项;
普通for循环只能作用域内使用。
while循环是在方法下设定初始表达式。循环后还可以在方法内使用。
我们经常使用while(true)来做死循环;
15、循环标号;
在外层循环外的某行前边,使用后边带有“:”的标示符,即定义标示符。
而后在内层循环braek、continoe后边紧跟之前定义的标号即可完成跳出外层循环。
例如;
chulai;
for (int i = 0;i<5;i++){
for (int j = 0;j<5;j++){
break chulai;
}
}
16、Switch选择结构
如果在几个选择中只能选择一个,那么switch最合适;
switch使用格式;
根据一个变量值,对比多个选择项值,当变量值匹配到对应可选项时,执行该选项对应语句;
例子;
int a = 6;
switch(a){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
case 4:
System.out.println("4");
break;
default:
System.out.println("x");
break;
}
15、方法的定义;方法用来封装一个完整的功能;
定义方法时明确;需要的数据 回馈的数据 (重要)
格式;
修饰符 返回值类型 方法名(类型 形式参数变量,类型 形式参数变量2,......){
执行语句
return 返回值;
}
修饰符;目前一直使用public static
返回值类型;回馈值的类型 如果没有用void代替
return;用来返回用于回馈的数值。没有可以直接retrun;
方法名;方法的名称
参数类型;需要的数据的数据类型
参数;需要的数据
方法的调用;
有回馈值;回馈值类型 接收回馈值的变量 = 方法名(方法需要的数据);
无回馈值;方法名(方法需要的数据);
方法的重载;
方法名可以一样,但是方法内的参数类型需不一样。
重载的注意事项
? 重载与返回值无关
? 重载与具体的变量标识符无关
? 重载只与方法名与参数名相关
? 重载方法方法名必须相同
? 重载方法参数必须不同:
参数个数不同
参数类型不同
参数顺序不同
16、数组的定义;
对数组内数据编号是从0开始;
格式;
数组类型[] 变量名 = new 数组类型[数据个数];
或
数组类型[] 变量名 = {数据,数据,数据,数据};
数组的使用;
数组变量名[索引]
获取数组长度:数组变量名.length
数组在返回长度的时候 变量名.length
字符串在返回长度的时候 String 变量名 = sc.nextLine(); 录入一行字符串
数组没有括号、字符串有括号
注意事项;
空指针异常;null NullPointerException
数组索引越界异常; ArrayIndexOutOfBoundsException
17、成员变量;
属于类下方法外的变量;
与方法相等的;可以被类内所有方法使用;
18、自定义类的定义;
格式;
创建文件名,与类名相同;
public class 类名{
数据类型 属性名称1;
数据类型 属性名称2;
......
}
自定义类的使用;
格式与引用类型一样;引用类型是Java设定;引用类型是用户设定;
1、导包;
2、创建对象;
3、使用方法;
19、ArrayList的集合容器的使用;
1、导包;2、创建对象;3、使用方法;
导包;import java.util.ArrayList;
创建对象; 与其他普通的引用数据类型一样,但要确定容器;
类名<集合内元素类型> 变量 = new 类名<集合内元素类型>();
ArrayList<String> xxXX = new ArrayList<String>();
注意:基本类型需要存放对应的引用类型
ArrayList<Integer> yyYY = new ArrayList<Integer>();
ArrayList<Double> zzZZ = new ArrayList< Double >();
使用方法;
public boolean add(元素类型 e) 直接向集合添加元素
public void add(数据类型 index,元素类型 e) 在指定索引处向集合添加元素
public 元素类型 remove(数据类型 index) 删除指定索引位置的元素
public 元素类型 set(数据类型 index,元素类型 e) 修改指定索引位置的元素
public 数据类型 size() 获取集合长度
public 元素类型 get(数据类型 index) 根据指定索引获取集合元素
20、一个项目的规划;
1、项目演示;
2、需求分析;
系统体系结构;
系统总体流程;
功能描述;
系统界面;
3、概要设计;
运行环境;
基本功能需求;
功能模块设计;
程序流程图;
数据库设计;
ER图;
表设计;
4、系统设计;
开发环境;
架构设计;
5、详细设计
主流程外相关方法;
功能问题;
权限问题;
工具方法;
首页;
顾客功能;
管理员功能;
6、编码实现;
环境搭建;
主流程外相关方法实现;
21、面向对象;
自定义类是Java最基本、最常用的、
类的格式;
创建java文件,与类名一样;
public class 类名(){
//成员变量
private 数据类型 变量值;
private 数据类型 变量值;
.....
//成员功能/方法;
public 返回值类型 方法名(参数类型 形参变量.....){
方法体;
return 返回值;
}
对应属性的get/set方法;
}
相同名字变量主要看方法内参数类型是否已定;
已定;加this.变量名 = 变量名;
未定;变量名; 直接赋值非成员变量;
static 修饰;
在同一个类下,如果不创建对象直接调用方法需要方法有static。
如果使用对象调用方法,可不用使用static。
22、继承
父类已有,创建子类;
在父类中有子类的成员属性、成员方法时可以创建子类;
创建父类安装正常创建方法;1、class文件名、类名;2、成员变量、成员方法等;3、get、set方法;
创建子类通过extends关键字创建;class 子类 extends 父类;
在测试类中直接调用get/set方法、成员方法使用子类;
设计原则;子类一定比父类功能更强大;
Java中的继承规则
Java只支持单继承,不支持多继承。即只能有一个父类。
父类可以继续有父类。
只有Object类没有父类。
在使用父类型的地方,均可以给予子类对象!!!!(重要)
方法重写;
当子类继承父类的方法时,可以进行方法重写;
方法重写子类必须与父类的方法一样,只有执行语句不一样;
如果子类方法与父类方法不一样就不属于方法重写;
方法重写按照严格的检查需要加上 @override;检查方法是否属于重写;
格式;
@Override
父类方法(){
子类执行语句;
}
Java中方法重写规则
访问权限相同或子类方法更大
方法名称必须相同
参数列表必须相同
返回值为基本类型时必须相同
返回值为引用类型时相同或子类小
抽象类与抽象方法;
抽象类即不能创建实例的类型,仅用来描述一种类型应该具备的基本特征和功能;
抽象方法即只有功能声明,没有功能主题实现方法;
具体类继承抽象类,将继承过来的首相方法重写为具体方法(该过程叫实现),完成类的定义,创建的为子类对象;
有抽象方法的类一定是抽象类,抽象类不一定有抽象方法;
当父类有多个抽象方法时,子类可以只实现其中的一部分抽象方法,但是此时子类也是抽象类;
创建对象的类一定不是抽象类,一定不包含抽象方法;
抽象方法没有方法体;只用于子类的重写使用。、
所有使用父类的地方也可以传入子类对象;
抽象类格式;
使用abstract 修饰抽象类与抽象方法;
//abstract 在 class 前修饰类;
//abstract 在访问权限后,返回值类型前修饰方法;
23、构造方法;正常开发不可缺少,语法上必须存在的
可以直接给变量赋值,无需在对象产生后在赋值
构造方法必须存在,如果没有手动给出,java会自动补齐一个空参的构造方法;
如果手动给出过空参或有返回值的构造方法,java将不再自动产生空参构造方法;(重要)
格式;奇怪的方法定义格式;没有返回值类型定义,方法名或类名相同。
public 类名(参数类型 参数,参数类型 参数2){
//创建对象时要执行的逻辑,经常为——为成员变量赋值
}
一般在使用构造方法的时候只定义两个;一个是空参的构造方法;一个是满参的构造方法;
24、多态
必须要有子父类关系;必须要有方法重写,不然没有意义;
多态的好处,复用性及扩展性。
如果原来就是一个子类对象,使用多态赋值给了父类的引用
则可以通过强转向下转为子类引用;
如果原来只是一个父类对象,赋值给了父类引用,则不能随便转为子类引用;
1、同一种类型的引用,指向不同的对象可以有不同的实现。
2、同一个对象,类型不同时,可以有不同的功能。
25、final/static 关键字
final;是最终修饰符;可以修饰类、成员方法、成员变量;
final;修饰的类无法被继承;
final;修饰的方法无法被重写;
final;修饰的变量方法被再次赋值,因为修饰后的变量为常量;
abstract/final 不能同时修饰一个类
abstract修饰的方法没有方法体。所属的类为抽象类
static 关键字
static块 属于类的代码块,只执行一次在加载期间
一般用于加载静态资源(图片、音频、视频)
static修饰的成员变量属于类的静态变量,在内存中放在方法区内,任何类的静态变量只有一份。
26、接口 关键字;implements
1、接口中只能包含常量和抽象方法
2、接口不能被实例化
3、子类实现接口必须将抽象方法都实现。
4、类可以用多个借口用“逗号”隔开使用。
5、接口与接口之间可以继承
27、包 作用;解决命名冲突的问题
1、package 关键字
2、同一个包下类不能重名
3、包名建议所有字母小写
4、import引入跨包类
28、访问修饰符
public 公有的 任何类都可访问
protecte 受保护的 本类、子类、同包类
默认 (不建议) 本类、同包类
private 私有的 本类
编程中出现问题
1、 程序编写完成后出现;
错误: 编码GBK的不可映射字符
可用 javac -encoding UTF-8 xx.java
字段来进行编译!
2、 编译时出错;
错误; 解析时以达到文件结尾
原因; 这个错误其实就是说你的语法有错误.
比如:少了一个小括号,大括号,或者是main()方法格式不对
3、 在使用eclipse编译时出错;
每一个编码运行的时候需要一个程序的入口;
所以再使用eclipse编码的时候出现没有main方法时;出现打印出错;
4、在使用构造方法时,
在父类与子类内使用构造方法必须是两个方法,1、空参;2、满参;
如果父类与子类都使用空参、满参后再调用时还出错;
看构造方法名是否与类名一致。
看子类是否继承了父类;extends关键字是否忘记写
*/
|