JAVA技术贴
Java 特点: 跨平台 开源 有移植性
JVM 是java虚拟机java程序需要运行在虚拟机上,不同平台有自己的虚拟机,因
此java语言可以跨平台 如坦克大战
JRE jvm +类库 让程序运行起来
JDk JRE + JAVA 开发工具
DOS
d:切换盘符
dir:列出当前目录下的文件以及文件夹
cd (进入指定目录)
cd/ 退回根目录
cd..返回上一个文件
cls 清屏
exit 退出dos命令行
环境生成:
创建新的变量名称:JAVA_HOME
计算机-右键属性-高级系统设置-高级-环境变量-系统变量
为JAVA_HOME添加变量值:JDK安装目录
在path环境变量最前面添加如下内容
%JAVA_HOME%\bin;
关键字特点 都要小写 如 public static void
常量 : 字符串 整数 小数 布尔 字符 java有常量优化机制
变量 : 是内存中的一小块区域.在程序执行的过程中,其值可以一定范围内发生改变
数据类型 1:基本数据类型 2:引用数据类型(类,接口,数组)
整数 byte 1 小数 字符 布尔
Short 2 float4 char 2 boolean 1
int 4 double 8
long 8
long s=214748550L 在其值超过int 范围内加L
long 8字节小于float的4字节
标识符 A unicode字符
数字字符 英文大小写字母,汉字(不建议使用汉字)
B 下划线_ C 美元 $
不能以数字为开头
不能以JAVA中的关键字
常见的命名规则 见名知意
包 (其实就是文件夹,用于对类进行管理)
全部小写 多级包用.隔开 如 com, com.itheima
类 一个单词首字母大写 多个单词每个首字母单词大写
方法 变量 如果一个单词全部小写 多个单词从第二个单词首字母大写
方法内的定义是赋值的右边到所对括号
数据类型的类型转换:
隐式转换(自动类型提升) byte a=2; int a=3; int c=a+b; =5
把取值范围小得变量byte提升为范围大的变量,然后与int做运算
强制转换 byte a=2; int a=3; byte c=(int)(a+b)
目标类型 变量名 =(目标类型)(被转换的数据)
不建议强制转换,因为会有精度损失
byte b=10;
byte c=20;
byte f=b+c;
1.解释 因为他们两是byte类型,运算是会将byte提升为int类型,其结果为int类型如果将值赋值给byte会损失精度
2.解释 由于b和c都是变量 既然是变量,那么其值就不确定,那个他们的值也不确定,有可能超过了byte的取值范围,在赋值给byte就会出错,比如 byte f=240;超过范围
byte ,short ,char ==>int ==>long ==>float==> double
运算符:对常量和变量进行操作的符号
运算符分类:
算术运算符 + - * / % ++ -- (字符参与加法就是把存储数据值来参与运算的) (字符串是字符拼接 从左到右 a=10 b20 a+b+"hello" =30hello 反之在后就是hello1020) 'a'=65 'A'=97 '0'=48
赋值运算符 +=,-=,*=,/=,%= 扩展的运算符 隐含了强制类型转换
关系运算符 ==,!=,>,>=,<,<=
逻辑运算符& &&有false 则为false | || 有true则true 前面的不管满不满足都执行后面的 后面的有短路效果 前面满足不执行后面的 异或 相同为false 不同为true !非真 真就是假 假就是真
三元运算符 a>b ? true:false
关系表达式 条件表达式 布尔表达式 都是一种表达式 只是换了一种说法其结果都是boolean
% 左边的绝对值比右边小时 值为左
左边的绝对值与右边相等或是他的倍数是结果为0
左边的绝对值大于右边时 值为余数
正负只与左边的值有关于右边无关
%2==0 可以为偶数奇数的判断 ==0偶 !=0奇
辅助键alt+/
main 然后alt+/
syso 然后alt+/
单行注释 选中内容 ctrl+/ 取消在ctrl+/
多行注释 选中内容 ctrl+shirt+/ 取消ctrl+shirt+\
格式化 ctrl+shift+f 右键 sours format
shift+回车 直接下一行 不把字打下去
alt 加 上键 加下键 往上往下
键盘录入
A:导包(位置放到class定义的上面)
import java.util.Scanner;
B:创建对象
Scanner sc = new Scanner(System.in);
C:接收数据
int x = sc.nextInt();
_Java开发工具(Eclipse工作空间的基本配置)(掌握)
* A:程序的编译和运行的环境配置(一般不改)
* window -- Preferences -- Java
* 编译环境:Compiler 默认选中的就是最高版本。
* 运行环境:Installed JREs 默认会找你安装的那个JDK。建议配置了Java的环境变量(不配找不到)。
* 问题:
* 低编译(编译的版本比较低),高运行(运行的版本比较高)。可以。
* 高编译,低运行。不可以。
* 建议,编译和运行的版本一致。
* B:如何去掉默认注释?
* window -- Preferences -- Java -- Code Style -- Code Templates--Code
* 选择你不想要的内容,通过右边Edit编辑。
* 注意:请只删除注释部分,不是注释部分的不要删除。
* C:行号的显示和隐藏
* 显示:在代码区域的最左边的空白区域,右键 -- Show Line Numbers即可。
* 隐藏:把上面的动作再做一次。
* D:字体大小及颜色
* a:Java代码区域的字体大小和颜色:
* window -- Preferences -- General -- Appearance -- Colors And Fonts --Java修改 -- Java Edit Text Font--edit进行修改
* b:控制台
* window -- Preferences -- General -- Appearance -- Colors And Fonts -- Debug -- Console font
* c:其他文件
* window -- Preferences -- General -- Appearance -- Colors And Fonts -- Basic -- Text Font
* E:窗体给弄乱了,怎么办?
* window -- Reset Perspective
* F:控制台找不到了,怎么办?
* Window--Show View—Console
* G:取消悬浮提示(将鼠标停留在某个类上所出现的提示信息)
* window -- Preferences -- Java--Editor--Hovers。右边将Combined Hover勾去掉。
* 这样代码的悬浮框就不会自动出现了。如果想看提示,将光标悬浮在代码上,按F2即可。
Random:用于产生随机数
使用步骤:
A:导包
import java.util.Random
B:创建对象
Random r = new Random();
可以这么写 Random random = new Random();
C:获取随机数
int number = r.nextInt(10);
获取的是0-10之间的随机数,包括0,不包括10
数组 :存储同一种数据类型的多个元素的容器
定义格式 数据类型[] 数组名
数据类型 数组名[] int[] arr=new int[3] 能存储3个元素 索引=长度-1
int[] arr 定义了一个int类型的数组,数组名叫arr 推荐的
int arr[] 定义了一个int类型的变量,变量名叫arr数组
数组初始化 就是为数组开辟内存空间,并为数组中的每个元素赋予初始化
我们有2种方法
1动态初始化 直接给出数组长度 有数组初始化值
2静态初始化 直接给出数组每个元素是什么,但不给出长度
动态初始化 数据类型[] 数组名 =new 数据类型[数据长度]
堆 (存储的是new出来的东西) 使用完毕 会在有空的时候回收
栈 (存储的是局部变量) 使用完毕立即回收
局部变量就是定义在方法中的变量
堆 储存new出来的东西,实体,对象,每个对象都有地址值每个对象都有默认值 byte short int long 0
float double 0.0 char\u0000 boolean false 引用类型 null
静态初始化 数据类型[] 数组名 =new 数据类型[]{元素1,元素2,....}
简化格式 数据类型[] 数组名 ={} 有局限性 为数组的声明与赋值分开写的时候简写形式行不通
常见问题:
A:java.lang.ArrayIndexOutOfBoundsException
数组越界异常
产生的原因:就是你访问了不存在的索引元素。
B:java.lang.NullPointerException
空指针异常
产生的原因:数组已经不指向堆内存的数据了,你还使用数组名去访问元素。
当数组的地址值赋值为空的时候,再去访问他的时候不存在
遍历 数组名.length
二维
动态 数据类型[][] 数组名 =new 数据类型[m][n]
m表示的是二维数组中一维数组的个数
n表示的是一维数组中元素的个数
静态 数据类型[][] 数组名 =new 数据类型[][]{{元素1},{元素2}....}
简化 数据类型[][] 数组名={{元素1},{元素2}....}
arr[0][0]表示拿一维数组中一维的元素 元素=索引
二维数组.length 获取的就是二维数组中有几个一个数组个数
arr.length
二维数组 int[m][n] 后面那个n可以省略代表可以自己拟定个数 如果有数字代表每个一维数组里都要有几个元素
假如我有一个二维数组 arr
二维数组里的一维数组 arr[索引]
我要从中获取二维数组的元素 arr[索引][索引]
for(int i=0;i<arr.length;i++) i表示数组的索引,而索引是从0开始计算的,并且最大索引是arr.length-1
System.out.println(arr[i]) arr[i]表示数组中的每一个元素
流程控制语句分类
顺序结构 从上往下,依次执行
选择结构 if
语句格式一 if(关系表达式){语句体} 首先先看关系表达式的值是true还是false true就执行语句体false就不执行
语句格式二 if(关系表达式){语句体}else{语句体} 首先看关系表达式对还是错 错则执行下面的语句体
语句体格式三 if(){
输出语句
}else if(){
}else{}
switch 格式
switch(表达式){
case 值1:
break;
case 值2 :
break;
default :
break;
}
表达式的取值:byte,short,int,char
JDK5以后可以是枚举
JDK7以后可以是String
case后面的值 就是来和表达式的值进行匹配的内容
break 表示中断
default 所有值不匹配是就执行default
default 不一定要放在最后,还可以在前面或者中间也可以,但还是从case开始运行,如果case后面没有break,会出现穿透,会执行里面的内容 遇到右大括号 如果按星期的话你打week4 可下面没有break,和default 那么 case 4: 会一直穿透在右大括号}
键盘录入 方式 1手动导入 2 Scanner sc = new Scnner(System.in);鼠标点叉叉 3.快捷键(推荐) ctrl+shirt+o
for(初始化语句;判断语句;控制条件语句){循环体语句}
自我理解 如果求和求个数之类的要定义一个量去接收 要放在循环体上面,不能放里面,因为在里面每次都会初始化,不符合,还有打印 看情况,在循环体里打是每成功一次打印一次,在循环体外就打印一次. 循环体内外打印要仔细思考 如 横着打印出 去掉print(ln)
初始化语句
while(判断条件语句){
循环体语句
控制条件语句
}
初始化语句;
do {
循环体语句;
控制条件语句;
} while((判断条件语句);
do…while循环至少会执行一次循环体。
for循环和while循环只有在条件成立的时候才会去执行循环体
for 跟while for循环结束后变量不能被使用了 而while循环后初始化值还可以被使用 他是在main方法的括号内
break 用于结束循环 x=3 他就只打印到2 在switch语句中 也可在循环中 离开这两个地方就没有意义 跳出当前所在循环
continue 只能在循环中用 离开循环没有意义 跳过本次循环继续下次循环
方法就是完成特定功能的代码块
方法定义分为两部分:声明 ,实现
声明:大括号前边的内容全部叫声明
修饰符 返回值类型 方法名(参数类型参数1,参数类型参数2.....)
实现:用大括号包起来的内容
定义格式 修饰符 返回值类型 方法名(参数类型 参数名,参数类型 参数名.....)
方法体
return 返回值
return 结束方法 把返回值返回给调用者
方法的调用 有明确返回值的方法调用
单独调用 没有意义
输出调用 有意义,但不够好,因为我可能拿结果就行别的操作
赋值调用 推荐的
sum(10,20);
输出调用
System.out.println(sum(10,20));
赋值调用
int s = sum(10, 20);
System.out.println(s);
方法的调用 方法不调用不执行,方法只有被调用,才会执行
方法的调用格式 方法名(实际参数)
如果一个方法没有明确的返回值类型,也不能吧返回值类型地方空出来应该写 void表示方法没返回值类型
方法()
void 调用方法 单独调用 不能赋值调用 跟打印调用
断点:
其实就是一个标记,哪里不会加哪里,在代码区域左边双击即可加断点
private关键字:
是一个修饰符,可以修饰成员变量,也可以修饰成员方法被private修饰的成员只能在本类中被访问
String的常用构造方法:
String(String original):把字符串数据封装成字符串对象
String(char[] value):把字符数组的数据封装成字符串对象
String(char[] value,int index,int count):把字符数组中的一部分数据封装成对String类的判断功能:
startsWith()判断字符串是否以指定的字符串开头
end With()判断字符串是否以指定的字符串结尾
contains 包含
isEmpty 判断 基本上 is开头的都是判断类型
String类的获取功能:
int length():获取字符串的长度,其实也就是字符个数
char charAt(in index):获取指定索引处的字符(可用于对字符串的遍历)
int indexOf(String str):获取str在字符串对象中第一次出现的索引
String substring(int start):从start索引开始截取字符串,默认到结尾结束
String substring(int start,int end)从start索引开始截取字符串,到end索引结束
String类的转换功能:
char[] toCharArray():把字符串转换为字符数组
String toLowerCase():把字符串转换为小写字符串
String toUpperCase():把字符串转换为大写字符串
String类的其他功能:
String trim():去除字符串两端空格
String[] split(String str):按照指定符号分割字符串(如字符串开头有分割元素,数组前会有一个空元素,当分割元素在结尾时数组结尾则没有空元素)
StringBuilder:是一个可变的字符串,可以减少垃圾
String和StringBuilder的区别:
String的内容是固定的.
StringBuilder的内容是可变的.
构造方法:
StringBuilder()
成员方法:
public int capacity():返回当前容量
public int length():返回长度()
容量:capacity
长度:length
StringBuilder类的常用方法
添加功能:
public StringBuilder append(任意类型):添加数据并返回自身对象
反转功能:
public StringBuilder reverse()
添加功能演示:
创建对像
StringBuilder sb = new StringBuilder();
public StringBuilder append(任意类型)
StringBuilder sb2 = sb.append("hello")
System.out.println("sb:" + sb);
System.out.println("sb2:" + sb2); System.out.println(sb == sb2);
sb.append() sb是对象,方法运行完还是一个对象,还能继续调用方法
链式编程
sb.append("hello").append("world").append("true").append(100);
System.out.println(sb);
结果:helloworldtrue100
集合类的特点:
长度可变.
ArrayList<E>:
大小可变数组的实现
<E>:是一种特殊的数据类型,泛型.
例:ArrayList<String>,ArrayList<Student>()
添加元素:
public boolean add(E e):添加元素
public void add(int index,E element):在指定的索引处添加一个元素
获取元素:
public E get(int index):返回指定索引处的元素
集合长度:
public int size():返回集合中的元素的个数
删除指定的元素:
public boolean remove(Object o):删除指定的元素,返回删除是否成功
public E remove(int index):删除指定索引处的元素,返回被删除的元素
修改元素:
public E set(int index,E element):修改指定索引处的元素,返回被修改的元素
总的来说集合就是 获取 删除 修改 添加
|
|