1991年为oak,主要是做电子嵌入式产品,但因c语言技术相对成熟而被雪藏。实用性低。直至1993年IE浏览器的出现成就了oak,后改为JAVA。
JAVASE- - -语言的一些基本语法和用法 主做pc端和客户端程序
JAVAEE- - -主要应用于WEB及浏览器应用级项目 OA SAAS ERP等
JAVAME- - -塞班系统 Android系统的出现
大数据相关的hadoop的源码是java
跨平台:
java是运行在JVM虚拟机上的,而不同的平台会有不同的JVM虚拟机,虚拟机是跨平台的,故而JAVA语言跨平台
Jdkjavadevelopmentkit JAVA的开发工具包
Jdk----java的开发工具
Jre-----java RunTimeenvironmentjava的运行时环境
一般安装JDK时都会自动安装Jre
在安装好JDK后还需要在 - - 我的电脑 ----属性 - - -高级系统设置 - - - -环境变量- - - 配置环境变量
分别是JAVA_HOME,Path和class_path
配置好后再CMD中用java -version,Java,javac检测是否配置完成即可
你的HelloWrold编写完后是.java文件(源代码文件)。需要在CMD中通过javac命令编译成.class文件(字节码文件),方可用java命令运行
源代码文件通过javac编译成字节码文件后。传入JVM虚拟机,在通关调用JVM中的java类库传入类加载器(classLoader)加载传入字节码解释器和JIT即时编译器后一起传输至执行引擎通过os硬件执行。
JVM在底层执行的class文件都是二进制文件
//访问修饰符 类关键字 类名
public class HelloWorld {
// 主函数 主方法 -----整个程序的入口
// 4要素 1-public 2 static 3 void 4 方法名称必须叫main
public static void main(String [] args){
// 打印语句
//类.属性.方法 带()都叫方法
System.out.println("Hello Java");
}
}
注释分为单行注释和多行注释以及文档说明注释
//单行注释
/*
多行注释1
多行注释1
*/
/**
*文档注释
* @author maclu 作者
* @since 2021.5.9 时间
* @param args
* @return返回值
* @throws抛出异常
*/
关键字 package一般命名规范是公司域名的反写,包的主要作用就是为了在不同文件夹下存在相同的文件名称。
\n换行至下一行
\t一个Tap的位置–制表位
Scanner扫描器。用于输入。
package com.openlab.test;
import java.util.Scanner;
publicclass HelloWorld {
publicstaticvoid main(String[] args) {
System.out.println("请输入您的角色名:");
//创建Scanner对象
Scanner input = new Scanner(System.in);
String key = input.nextLine();
System.out.println(key);
}
}
L字符;fchar 标识是单引号 用于表示单个字符 会存在数字 字母 特殊符号 以及文字 占16个bit 2个字节取值范围:0x0000~0xffff默认值是0x0000;
boolean 占8个bit 1个字节 默认值false 值只能为true或者false
面试题:String是不是基本数据类型 如果不是基本数据类型有哪些?
String是字符串类型 -----引用数据类型 不是基本数据类型
小类型转大类型自动转换,大类型转小类型需要强制转换。
char可以和byte类型转换:以ASCII码的形式转换
boolean 不能和任何类型转换
变量的定义:一般情况下指的程序中需要计算的数据通过开辟内存空间而存储的数据,这个数据是通过某种媒介来进行访问 用来存储数据的媒介叫变量
在类的里面方法的外面的变量叫做成员变量 成员变量存在堆中(heap),不会随着方法的结束而消失
在方法的里面的变量叫做局部变量。局部变量存在栈空间之中。由栈创建,会随着方法的结束而消失。局部变量不能使用static关键词修饰
package HashCode;
public class Test {
public static int a=0;
public static void main(String[] args) {
Test.student();}
public static void student(){
int b=1;
b=a}
}
非基本数据类型都是引用数据类型。例如(String)
+ 加- 减* 乘/ 除% 求余10%3 = 1
7%5 ----2
7%-5 ----(2)
-7%5 ----(-2)
-7%-5 ----(-2)
总结 :求余时 负号跟着被除数走。
//练习
int a = 9;
int b = 2;
int c = a+++b;
int d = ++a+c++;
int e = a+++c++;
// a-9 b-2 c-12 d-22 e-22
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(e);
++放前面 先+1 再取值++放后面 先取值 再+1;= :运算顺序是从右至左 int a = 0;+=:a+=1 ----a = a+1;-=:a-=1------a=a-1*=:a*=2------a=a*2/=:a/=2-------a=a/2> >= 大于 大于等于< <= 小于 小于等于== 恒等 用于判定两个基本数据类型的值是否相同!= 不等X?Y:Z
表达式X的值如果为true 则执行表达式Y 如果为false 则执行表达式Z
可以用于替代if选择分支语句结构。
equals方法用于比较两个String是否相同。。。。且该方法来自于String类中的equals
面试题:
== 和equals的区别?
运算结果 ----数字
位运算和移位运算都要在二进制的基础之上运算
&
按位与 两位都为1时结果才为1 有一个位0都落0
5&13
0101
1101
-------.
0101
|
按位或 一个位1都为1
0101
1101
-------.
1101
^
按位异或
两位相同为0 相异为1
5^13
0101
1101
-------.
1000
~ 取反 ~5
正整数的二进制 可以通过运算来获得 负数的二进制应该如何运算:
-5的二进制码 = 5的二进制取反+1 补码
反码
>> 右移
各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)
13>>2 右移之后结果是3
128 >> 4
1000
8
右移特点 数字越来越小 移位是除以2的多少次幂
-13>>2
<< 左移
3<<2
3<<2
1100 —12
3<<3
11000----24
左移特点 数字越变越大,移位是多少就是乘以2的多少次幂 左移时不分正负
如果是整数 正常补0
如果是负数 则用整数的补码进行运算
>>> 无符号右移
逻辑右移 不会因为符号位进行 所有高位均补0。
if(x == 0){
System.out.println("yes");
if(x == 1){
System.out.println("yes1");
}
}else if(x==1){
System.out.println("no");
}
练习:写一个方法:宠物的攻击属性对应宠物的属性会产生不同克制的暴击伤害。
//if判断练习
import java.util.Scanner;
public class PocketMonster {
public static final String COMMNOLY="一般";//一般
public static final String COMBAT="格斗";//格斗
public static final String FLIGHT="飞行";//飞行
public static final String POISON="毒";//毒
public static final String EARTH="地上";//地上
public static final String ROCK="岩石";//岩石
public static final String INSECT="虫";//虫
public static final String GHOST="幽灵";//幽灵
public static final String STEEL="钢";//钢
public static final String FIRE="炎";//炎系
public static final String WATER="水";//水系
public static final String GRASS="草";//草
public static final String ELECTRIC="电";//电
public static final String SUPER="超能";//超能
public static final String ICE="冰";//冰
public static final String LOONG="龙";//龙
public static final String EVIL="恶";//恶
public static final String GOBLIN="妖精";//妖精
//技能伤害 1为一半伤害
public static final int ZERO=0;
public static final int HALF=1;
public static final int DOUBLE=2;
public static final int TWOFOLD=4;
private static String skill; //宠物技能
private static String enemy; //宠物属性
PocketMonster(String enemy,String skill){ //宠物对象
this.enemy=enemy;
this.skill=skill;
}
PocketMonster(){} //空构造
// 开始游戏 创建对象并PK
public void begin(){
System.out.println("请选择你的宠物属性:-一般\t格斗\t飞行\t毒\t地上\t岩石\t虫\n幽灵\t钢\t炎\t水\t草\t电\t超能\t龙\t恶\t妖精\t");
Scanner pestb = new Scanner(System.in);
String b= pestb.next();
System.out.println("请选择你的技能属性:-一般\t格斗\t飞行\t毒\t地上\t岩石\t虫\n幽灵\t钢\t炎\t水\t草\t电\t超能\t龙\t恶\t妖精\t");
Scanner pesta = new Scanner(System.in);
String a= pesta.next();
//创建宠物
PocketMonster petsa = new PocketMonster(b,a);
//选择要攻击的宠物属性
System.out.println("请选择敌对宠物的属性:-一般\t格斗\t飞行\t毒\t地上\t岩石\t虫\n幽灵\t钢\t炎\t水\t草\t电\t超能\t龙\t恶\t妖精\t");
Scanner pestc = new Scanner(System.in);
String c= pestc.next();
// PocketMonster petsa = new PocketMonster("一般","一般");
System.out.println(pk(petsa,c));
}
//打架方法
public static int pk(PocketMonster pest,String c){
//普通
if (pest.skill.equals(COMMNOLY)){
if (c.equals(GHOST)){
return ZERO;
}else if (c.equals(ROCK)){
return HALF;
}else
// if (c.equals(COMMNOLY)||c.equals(COMBAT)||c.equals(FLIGHT)||c.equals(POISON)||
// c.equals(EARTH)||c.equals(INSECT)||c.equals(FIRE)||c.equals(WATER)||c.equals(GRASS)
// ||c.equals(ELECTRIC)||c.equals(SUPER)||c.equals(LOONG)||c.equals(EVIL)||c.equals(GOBLIN)
// ||c.equals(ICE))
// 以上 普通倍数判断 直接省略
{
return DOUBLE;
}
}
//格斗
else if (pest.skill.equals(COMBAT)){
if (c.equals(GHOST)){
return ZERO;
}else if (c.equals(FLIGHT)||c.equals(POISON)||c.equals(INSECT)||c.equals(GOBLIN)||c.equals(SUPER))
{
return HALF;
}else if (c.equals(COMMNOLY)||c.equals(ROCK)||c.equals(STEEL)||c.equals(ICE)||c.equals(EVIL)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//飞行
else if (pest.skill.equals(FLIGHT)){
if (c.equals(ROCK)||c.equals(STEEL)||c.equals(ELECTRIC)){
return HALF;
}else if (c.equals(COMBAT)||c.equals(INSECT)||c.equals(GRASS)||c.equals(GOBLIN)){
return TWOFOLD;
}else {
return DOUBLE; }
}
//毒
else if (pest.skill.equals(POISON)){
if (c.equals(STEEL)){
return ZERO;
}else if (c.equals(POISON)||c.equals(EARTH)||c.equals(ROCK)||c.equals(GHOST)){
return HALF;
}else if (c.equals(GRASS)||c.equals(GOBLIN)){
return TWOFOLD;
}
}
//地上
else if (pest.skill.equals(EARTH)){
if (c.equals(FLIGHT)){
return ZERO;
}
else if (c.equals(INSECT)||c.equals(GRASS)){
return HALF;
}else if (c.equals(POISON)||c.equals(ROCK)||c.equals(STEEL)||c.equals(ELECTRIC)||c.equals(FIRE)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//岩石
else if (pest.skill.equals(ROCK)){
if (c.equals(COMBAT)||c.equals(EARTH)||c.equals(STEEL)){
return HALF;
}else if (c.equals(FLIGHT)||c.equals(INSECT)||c.equals(FIRE)||c.equals(ICE)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//虫
else if (pest.skill.equals(INSECT)){
if (c.equals(COMBAT)||c.equals(FLIGHT)||c.equals(POISON)||c.equals(GOBLIN)||c.equals(GHOST)||c.equals(STEEL)||c.equals(FIRE)){
return HALF;
}else if (c.equals(GRASS)||c.equals(EVIL)||c.equals(SUPER)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//幽灵
else if (pest.skill.equals(GHOST)){
if (c.equals(COMMNOLY)){
return ZERO;
}
else if (c.equals(EVIL)){
return HALF;
}else if (c.equals(GHOST)||c.equals(SUPER)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//钢
else if (pest.skill.equals(STEEL)){
if (c.equals(STEEL)||c.equals(FIRE)||c.equals(WATER)||c.equals(ELECTRIC)){
return HALF;
}else if (c.equals(ROCK)||c.equals(ICE)||c.equals(GOBLIN)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//炎
else if (pest.skill.equals(FIRE)){
if (c.equals(ROCK)||c.equals(FIRE)||c.equals(WATER)||c.equals(LOONG)){
return HALF;
}else if (c.equals(INSECT)||c.equals(STEEL)||c.equals(GRASS)||c.equals(ICE)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//水
else if (pest.skill.equals(WATER)){
if (c.equals(WATER)||c.equals(GRASS)||c.equals(LOONG)){
return HALF;
}else if (c.equals(EARTH)||c.equals(ROCK)||c.equals(FIRE)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//草
else if (pest.skill.equals(GRASS)){
if (c.equals(FLIGHT)||c.equals(POISON)||c.equals(INSECT)||c.equals(STEEL)||c.equals(FIRE)||c.equals(GRASS)||c.equals(LOONG)){
return HALF;
}else if (c.equals(ROCK)||c.equals(EARTH)||c.equals(WATER)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//电
else if (pest.skill.equals(ELECTRIC)){
if (c.equals(EARTH)){
return ZERO;
}
else if (c.equals(ELECTRIC)||c.equals(GRASS)||c.equals(LOONG)){
return HALF;
}else if (c.equals(FLIGHT)||c.equals(WATER)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//超能
else if (pest.skill.equals(SUPER)){
if (c.equals(EVIL)){
return ZERO;
}
else if (c.equals(SUPER)||c.equals(STEEL)){
return HALF;
}else if (c.equals(COMBAT)||c.equals(POISON)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//冰
else if (pest.skill.equals(ICE)){
if (c.equals(ICE)||c.equals(STEEL)||c.equals(FIRE)||c.equals(WATER)){
return HALF;
}else if (c.equals(LOONG)||c.equals(FLIGHT)||c.equals(EARTH)||c.equals(GRASS)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//龙
else if (pest.skill.equals(LOONG)){
if (c.equals(GOBLIN)){
return ZERO;
}
else if (c.equals(STEEL)){
return HALF;
}else if (c.equals(LOONG)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//恶
else if (pest.skill.equals(EVIL)){
if (c.equals(COMBAT)||c.equals(EVIL)||c.equals(GOBLIN)){
return HALF;
}else if (c.equals(GHOST)||c.equals(SUPER)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
//妖精
else if (pest.skill.equals(GOBLIN)){
if (c.equals(POISON)||c.equals(STEEL)||c.equals(FIRE)){
return HALF;
}else if (c.equals(COMBAT)||c.equals(LOONG)||c.equals(EVIL)){
return TWOFOLD;
}else {
return DOUBLE;
}
}
return 0;
}
//主函数 通过空对象开始
public static void main(String[] args) {
PocketMonster Start = new PocketMonster();
Start.begin();
}
}
用于测试代码逻辑是否有错误
鼠标右键点击 JunitTestcase
TestCase
package com.openlab.testone;
import org.junit.Test;
import com.openlab.test.PocketMonster ;
import junit.framework.TestCase;
public class PetTest {
//@Test 测试注解
@Test
public void checkTypeToHurtTest1() {
PocketMonster p= new PocketMonster();
int bRet = p.pk("一般", "幽灵系");
// bRet ---实际值
// 设计书中的0 Pet.ZERO ---期望值
TestCase.assertEquals(Pet.ZERO, bRet);
}
@Test
public void checkTypeToHurtTest2() {
PocketMonster p= new PocketMonster();
int bRet = p.pk("一般", "岩石系");
// bRet ---实际值
// 设计书中的0 Pet.ZERO ---期望值
TestCase.assertEquals(Pet.HALF, bRet);
}
}
注意:
在等值判断的情况下会经常使用switch语句
浮点类型的数据不适合做等值判断 ,原因是判断的条件难以精确
package com.openlab.test;
import java.util.Scanner;
/*
*
* 红绿灯 index 单词 索引 -----
*/
public class SwtichTest {
public static void main(String[] args) {
System.out.println("该亮哪个灯了?");
Scanner input = new Scanner(System.in);
String key = input.next();
// charAt(index)
char c = key.charAt(0);
switch (c) {
case 'r':
System.out.println("红灯");
case 'y':
System.out.println("黄灯");
case 'g':
System.out.println("绿灯");
break;
default:
break;
}
}
}
一般范围性的判断使用if语句 如果是等值类型的判断使用哪个都可以。
int i = 0;
do{
System.out.println(i);
i++;
}while(i<10);
do-while要先执行一次循环体,再进行条件判断是否循环。而while是符合判断条件再执行。
break用于跳出循环continue用于继续循环因篇幅问题不能全部显示,请点此查看更多更全内容