Java基础(一)

一、java介绍:

java语言的特性:

  • 面向对象性
  • 健壮性
  • 跨平台性(write onece,run anywhere)-–JVM

JDK JRE JVM

河床好比操作底层,jdk好比是河水,java应用程序好比是船

注意事项

  • 源文件以.java结尾
  • 源文件中可以有多个class声明的类
  • 类中可以有主方法(即main()方法),其格式是固定的:public static void main(String[] args ){}
  • main()方法是程序的入口,方法内是程序的执行部分
  • 一个源文件中只能有一个声明为public的类,同时要求此类的类名与源文件名一致
  • 每个语句都已”;“结束
  • 执行程序:编译:javac.exe 编译完:生成诸多个.class字节码文件;运行:java.exe

注释

单行://

多行:/* 注释文字 */,多行注释不能嵌套

文档注释【java特有】:可以被javadoc解析

/** 
*@author:NXF
*@version:V1.0
*@param:XX
*/

javadoc -d 文件名 -author -version Helloworld.java

二、关键字、标识符、变量、运算符、流程控制、数组

1.关键字

特点:所有字母都为小写

1252882-20190508170904934-163589081.png

2.标识符

凡自己可以命名的地方都叫标识符

规则:26个英文字母大小写,0-9,_或$组成;数字不可以开头;不可以使用关键字和保留字,但能包含关键字和保留字;严格区分大小写,长度无限制;标识符不能包含空格

java名称命名规范:

  • 包名:多单词组成时所有字母都小写:xxyyzz
  • 类名、接口名:多单词组成时,所有单词的首字母大写:XxYyZz
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxYyZz
  • 常量名:所有字母都大写,多单词时每个单词用下划线连接:XX_YY_ZZ

3.变量

java中每个变量必须先声明 ,后使用

格式:数据类型 变量名=初始化值

作用域:一对{}内有效

1252882-20190508170140320-343257034.png

(1)整型
byte b1= 12;
short s1 = 128;
int i1= 12;
long l1 = 21345612L;#定义long型变量,值的末尾加"L"或'l',如果不加,会默认为int类型

1252882-20190508171032844-1346190655.png

(2)浮点型(带小数点的数值):

1252882-20190508170336067-569140972.png

例:float 单精度 、double 双精度(默认类型)

float f1 = 12.3F;#如果不加F,则会被认为是double类型
double d1 = 12.3;
(3)字符型:

1252882-20190508170329797-11233870.png

char只能表示一个字符[英文、中文、标点符号、日文..…];String表示多个字符

char c1 = 'a';
char c2 = '中';
String str1 = "ab";
String str2 = "中国";

//可以表示转义字符
char c3 = '\t';
char c4 = '\n';

char c5 = '\u123'
(4)布尔类型:

1252882-20190508170445847-1616541074.png

boolean只能够为true或false,不能取值null

boolean b1 = true;
if(b1){
    System.out.println('XXX');
}else{
    System.out.println('XXX');
}
变量之间的运算:

(不考虑boolean,剩下:char byte short int long float double)

自动类型转换:当容量小的数据类型与容量大的数据类型做运算时,容量小的会自动转换为容量大的数据类型:char,byte,short===>int===>long===>float===>double

int i1 = 12;
short s1 = 2;
int i2 = i1 + s1;
float f1 = 12.3F;
float f2 = f1 + i2;
//float d1 = f2 + 12.3;

long l = 12L;
float f3 = l;

需要注意的:当char/byte/short之间做运算时,默认的结果为int类型

short ss1 = 12;
byte bb1 = 1;
char cc1 = 'a';
//short ss2 = ss1 + bb1;错误
int ii1 = ss1 + bb1;//正确
//char cc1 + bb1;错误
short ss2 = 11;//正确
//short ss3 = ss1 + ss2;错误

System.out.println('*'+'\t'+'*');//93
System.out.println("*"+"\t"+"*");//*    *

强制类型转换:容量大的转换成容量小的,要使用强制类型转换符:()

强制类型转换的问题:导致精度的损失

long l1 = 12345L;
int m1 = (int)l1;

byte by1 = (byte)m1;//高位截取

平时常用的字符串,也是一种数据类型:String

String nation = "我是NXF";

字符串与基本数据类型之间的运算:只能是连接运算+,得到的结果仍然是一个字符串

String str = "abc";
String str1 = str + m1;//abc12345

String st1 = 'hello'
int myInt1 = 12;
char ch1 = 'a'
System.out.println(st1 + myInt1 + ch1);//hello12a
System.out.println(myInt1 + ch1 + st1);//109hello
System.out.println(ch1 + st1 + myInt1);//ahello12

字符串的赋值可以为“字符串”,也可以是数字+“字符串”的形式;

String st2 = "12";
str2 = 12 + "";

练习题:

String str1 = 4; //错,4应该加引号
String str2 = 3.5f + "";//对
System.out.println(str2)//输出:3.5
System.out.println(3+4+"Hello!")//输出7Hello!
System.out.println("Hello!"+3+4)//输出Hello!34
System.out.println('a'+1+'Hello!')//输出98Hello!
System.out.println("Hello"+'a'+1)//输出Helloa1

4.运算符

(1)算术运算符

1252882-20190508170304541-696251959.png

【1】除

//除:/
        int i = 12;
        int j = i/5;
        double d = i/5;
        double d1 = i/5.0;
        double d2 = (double)i/5;
        System.out.println(j);//2
        System.out.println(d);//2.0
        System.out.println(d1);//2.4
        System.out.println(d2);//2.4

【2】取模

 //取模:%取余数,结果的符号取决于被模数A:(A%B)
        int i1 = 12 % 5;
        int i2 = -12 % 5;
        int i3 = 12 % (-5);
        int i4 = -12 % (-5);
        System.out.println(i1);//2
        System.out.println(i2);//-2
        System.out.println(i3);//2
        System.out.println(i4);//-2

【3】前++、后++ | 前--— 后--—

//前++:先自增1,后做运算
//后++:先做运算,后自增1

int myInt1 = 10;
int myInt2 = myInt1 ++;
System.out.println(myInt1);//11
System.out.println(myInt2);//10

int myInt3 = 10;
int myInt4 = ++ myInt3;
System.out.println(myInt3);//11
System.out.println(myInt4);//11

//前++:先自减1,后做运算
//后++:先做运算,后自减1

int myInt11 = 10;
int myInt22 = myInt11 --;
System.out.println(myInt11);//9
System.out.println(myInt22);//10

int myInt33 = 10;
int myInt44 = -- myInt33;
System.out.println(myInt33);//9
System.out.println(myInt44);//9
(2)赋值运算符与比较运算符

【1】赋值运算符

+=

int i1 = 10;
i1 += 3;

short s = 10;
//s = s + 3;//编译不通过
s = (short)(s+1);//不建议如此实现
s += 1;//既可以实现运算,又不会更改s的数据类型
System.out.println(s);

区分好==和=的区别

if(b1=true)
    System.out.println("结果为真");//输出
else
    System.out.println("结果为假");

if(b1==true)
    System.out.println("结果为真");
else
    System.out.println("结果为假");//输出

*=

int i = 1;
i *= 0.1;//不会报错,会自动计算得到0.1,转成int之后,结果为0
System.out.println(i);//0

【2】比较运算符

if(i>1 && i<10){}
不能写为:if(1<i<10){}
(3)逻辑运算符

1252882-20190508170248743-275137197.png

 //& && | || ! ^
 boolean a = true;
 boolean b = false;
 System.out.println(a & b);//true
 System.out.println(a && b);//false
 System.out.println(a | b);//true
 System.out.println(a || b);//true
 System.out.println(!a & b);//false
 System.out.println(a ^ b);//true

&与&&的区别:

&:不管左端是true还是false,右端都会进行运算
&&:当左端为false时,右端不再进行运算

当左端为true时,&和&&都要进行运算

以后使用时,建议使用&&

int i1 = 10;
if (b & (i1++) >0){
    System.out.println('A');
}else{
    System.out.println('B');//B
}
System.out.println(i1);//11

int i2 = 10;
if (b && (i2++) >0){
    System.out.println('A');
}else{
    System.out.println('B');//B
}
System.out.println(i2);//10

| 与 ||的区别:

|:当左端为true时,右端照样做运算

||:当左端为true时,右端不再进行运算

当左端为false时,|和||都要计算右端

int i3 = 10;
if (a | (i3++) >0){
    System.out.println('A');//A
}else{
    System.out.println('B');
}
System.out.println(i3);//11

int i4 = 10;
if (a || (i4++) >0){
    System.out.println('A');//A
}else{
    System.out.println('B');
}
System.out.println(i4);//10

练习:

int x = 1;
int y = 1;
if (x++ == 2 & ++y == 2){
    x = 7;
}
System.out.println("x="+x+",y="+y);//2,2

int x1 = 1;
int y1 = 1;
if (x1++ == 2 && ++y1 == 2){
    x1 = 7;
}
System.out.println("x1="+x1+",y1="+y1);//2,1

int x2 = 1;
int y2 = 1;
if (x2++ == 1 && ++y2 == 1){
    x2 = 7;
}
System.out.println("x2="+x2+",y2="+y2);//2,2

int x3 = 1;
int y3 = 1;
if (x3++ == 1 || ++y3 == 1){
    x3 = 7;
}
System.out.println("x3="+x3+",y3="+y3);//7,1
(4)位运算符

两段是数值类型的数据

<< : 左移运算符,num << 1,相当于num乘以2

>> : 右移运算符,num >> 1,相当于num除以2

>>> : 无符号右移,忽略符号位,空位都以0补齐

1252882-20190508170230209-140317261.png

交换两个数

//交换两个数
int m = 12;
int n = 5;
//方法1:提供一个临时变量
int tmp = m;
m = n;
n = tmp;
//方法2:当m和n很大时,有可能出现精度损失
m = m + n;//m = 12 + 5
n = m - n;//n = 17 - 5
m = m - n;//m = 17 - 12

//方法3:异或,优点:没有上面两种方法的缺点
m = m ^ n;
n = m ^ n;//(m^n)^n
m = m ^ n;//(m^n)^m
(5)三元运算符

格式:(条件表达式)?表达式1:表达式2;

要求:表达式1与表达式2为同种数据类型

既然是运算符,就一定会有运算的结果,结果的数据类型与表达式1,2的类型一致

三元运算符在一定程度上,可以与if-else互换。(三元一定可以转换为if-else,反之不成立)

int i = 10;
int j = 20;
int max = (i>j)?i:j;
String str = (i>j)?"i大":"j大";
//String str = (i>j)?i:"j大";错误

String str1 = (i>j)?"i大":(i==j)?"相等":"j大"

练习:使用三元运算符,输出三个数中的最大值

//使用三元运算符,输出三个数中的最大值
int i = 10;
int j = 20;
int k = 30;
int max = (i>j)?((i>k)?i:k):((j>k)?j:k);

int max1 = (m>n)?m:n;
int max2 = (max1>k)?max1:k;

练习:手动的方式,从控制台输出60的16进制

//方法1:调包
int i = 60;
String binary = Integer.toBinaryString(i);//111100
System.out.println(binary);

String hex = Integer.toHexString(i);//3c
System.out.println(hex);

//方法2:
int j = i & 15;//获取到i的最低4位对应的值
String k1 = (j <= 9)?j+"":(char)(j-10+'a')+"";

i = i >> 4;
int z = i & 15;//高四位
String k2 = (z<=9)?z+"":(char)(z-10+'a')+"";

System.out.println(k2 + k1);

运算符优先级:

1252882-20190508170516539-964553923.png

5.流程控制

(1)顺序结构

(2)分支结构:if..…else if..…else和switch

//创建一个Scanner类的对象
import java.util.Scanner;
Scanner s = new Scanner(System.in);
//调用此对象的相应的方法,完成键盘输入的值的获取
//next():表示从键盘获取一个字符串
String str = s.next();

//nextInt:从键盘获取一个整数
int score = s.nextInt();

switch..…case:

[1]根据变量的值,选择相应的case去判断,一旦满足case条件,就执行case的相应语句。如果没有break或者已经到结尾的话,会继续执行其下的case语句。

[2]default:是可选的,而且位置是灵活的

[3]变量可以是哪些类型:char、byte、short、int、枚举、String(jdk1.7)

[4]case条件:其中条件只能是值,不能是取值范围

int i = 2;
switch(i){
  case 0:
    System.out.println("zero");
    break;
  case 1:
    System.out.println("one");
    break;
  case 2:
    System.out.println("two");
    break;
  default:
    System.out.println("other");
    break;

(3)循环结构

[1]for循环

格式:初始化条件+循环条件+迭代条件+循环体

for (int i=0;i<4;i++){
    System.out.println(i);
}

for循环与while可以相互转换

[2]while循环

格式:初始化条件+循环条件+迭代条件+循环体

int i = 1;
while i <= 20{
    System.out.println(i);
}

[3]do..…while

与while的区别:do..…while循环至少会执行一次

int i = 1;
do{
    if(i%2 == 0){
        System.out.println(i);
    }
    i++;
}while(i <= 100);

[4]嵌套循环

//100以内的所有质数
long start = System.currentTimeMillis();//获取系统当前的毫秒数
boolean flag = false;
for(int i=2;i<=10000;i++){
    for(int j=2;j <= Math.sqrt(i);j++) {
        if (i % j == 0) {
            flag = true;
            break;
        }
    }
    if(!flag){//flag == false
        //System.out.println(i);
    }
    flag = false;
}
long end = System.currentTimeMillis();
System.out.println("time:"+(end-start));

6.数组

转载于:https://www.cnblogs.com/nxf-rabbit75/p/10833014.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值