目录
学习目标:
- Java基本数据类型
- 变量和常量的定义及初始化
- Java的运算符
- 运算符的优先级
- Java分支语句之if…else
- 循环的嵌套
- 方法的定义
- 方法的形参和实参
- 方法的递归调用
学习内容:
Java基本数据类型
- 基本数据类型
- 数字类型
- 整型
- 整型表示: 八进制0开头,16进制0x开头,2进制0b开头
- byte(Byte)
- 1字节
- short(Short)
- 2字节
- int(Integer)
- 4字节
- long(Long)
- 8字节
- 浮点型
- 浮点表示:float和double后面加f/d科学计数法:aEb=a*10的b次方
- float(Float)
- 4字节
- double(Double)
- 8字节
- 字符型
- char(Character)
- 2字节,用''来表示,""就代表只含有一个字符的字符串
- 布尔型
- booolean(Boolean)
- 4字节
- 数字类型
- 引用数据类型
- 数组
- 接口
- 类
变量和常量的定义及初始化
变量:
定义:变量是内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),Java中每个变量必须先声明,后使用 该区域的数据可以在同一类型范围内不断变化
分类:
按数据类型分类:
按声明的位置: (在方法体外,类体内声明的变量称为成员变量;在方法体内部声明的变量称为局部变量)
注意事项:
(1)如果创建多个变量,那么变量之间的名称不可以重复。
(2)对于float和long类型来说,字母后缀F和L不要丢掉。
(3)如果使用byte或者short类型的变量,那么右侧的数据值不能超过左侧类型的范围。
(4)没有进行赋值的变量,不能直接使用;一定要赋值之后才能使用。
(5)变量使用不能超过作用域的范围。
(6)从定义变量的一行开始,一直到直接所属的大括号结束为止。
常量:
定义:常量是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变,一般用大写字符
语法:final 常量名 = 值;如:final String LOVE = 'java';
自动类型转换:
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级:
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
数据类型转换必须满足如下规则:
1. 不能对boolean类型进行类型转换。
2. 不能把对象类型转换成不相关类的对象。
3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
4. 转换过程中可能导致溢出或损失精度
Java的运算符
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | ++ -- + - !〜 | 从右到左 |
乘性 | * /% | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | >> = << = | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | | | | 左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %= > >= < <= &= ^= |= | 从右到左 |
逗号 | , | 左到右 |
@从右到左:!! ture=ture
@+:尝试将操作数转换为数字
@-:尝试将操作数转换为数字,然后取反
@~:反转操作数中的所有位并返回一个数字( -(x+1) 按位不在数字上的结果是- 1)
@移位:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。(数字意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。)(最多0000 0000 0000 0000 0000 0000 0000 0000)
@&:参加运算的两个对象,按二进制位进行“与”运算,负数按补码形式参加按位与运算。
@|:参加运算的两个对象按二进制位进行“或”运算,负数按补码形式参加按位与运算。
两个二进制数按照&、|规则来计算出第三个数。
@^:参加运算的两个数据,按二进制位进行“异或”运算
两个二进制数根据^规则(0^0=0;0^1=1;1^0=1;1^1=0;)
特殊作用:
(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。
(2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。
例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。
(3)基于异或运算,不引用新变量交换两个变量的值
a = a ^ b; b = a ^ b; a = a ^ b;
@?: <表达式1>?<表达式2>:<表达式3>
在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则返回表达式3的值。
延伸:
String a = "21";int b = Integer.parseInt(a);//String 转int。
int a = 21; String b = String.valueOf(a);//int转String。
·int和Integer:
Integer i = 10 ;
Integer j = 10 ;
System.out.println(i == j);
// true
Integer a = 128 ;
Integer b = 128 ;
System.out.println(a == b);
//false
int k = 10 ;
System.out.println(k == i);
//ture
int kk = 128 ;
System.out.println(kk == a);
//ture
Integer m = new Integer( 10 );
Integer n = new Integer( 10 );
System.out.println(m == n);
//false
Integer是一个int基本数据类型的封装类。
重要方法:
static int parseInt(Str)将字符串参数转换为int型
short shortValue()以short类型返回该Integer(long、float同理)
static Integer valueOf(Str)字符串变成Integer对象
**String.valueOf(char[]),把字符数组变成字符串
区别:
①、Integer 是 int 包装类,int 是八大基本数据类型之一
②、Integer 是类,默认值为null,int是基本数据类型,默认值为0;
③、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。
原因:
2、在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。
3、Integer的自动拆箱功能,也就是比较两个基本数据类型,会先把integer拆成int去比较
·equals():
Integer q = 1 ;
Integer w = 2 ;
Integer e = 3 ;
Integer r = 3 ;
Integer d = 321 ;
Integer f = 321 ;
Long g = 3L;
Long h = 2L;
System.out.println(e == r);
//ture
System.out.println(d == f);
//false
System.out.println(e == (q + w));
//ture
System.out.println(e.equals((q+w)));
//ture
System.out.println(g == (q+w));
//ture
System.out.println(g.equals(q+w));
//false
System.out.println(g.equals(q+h));
//ture
原因:
3、4 在运算过后都会触发自动拆箱过程,==,比较的是intValue()方法,而equals则是调用了Integer.valueOf(a.intValue()+b.intValue());
5、6、7 ==可以将小范围的数据类型转换为大范围的数据类型,会把int转换为long类型,equals()不会进行类型转换,不同类型比较会返回false,但是在两个不同类型进行运算符操作后会向上转型。
·ACSII码
65-90:A-Z
97-122:a-z
48-57:0-9
LintCode刷题
·玩具工厂
用switch语句来判断运用到哪个玩具对象,创建并返回对象
interface Toy {
void talk();
}
class Dog implements Toy {
@Override
public void talk() {
System.out.println("Wow");
}
}
class Cat implements Toy {
@Override
public void talk() {
System.out.println("Meow");
}
}
public class ToyFactory {
public Toy getToy(String type) {
// Write your code here
switch (type){
case "Dog":
return new Dog();
case "Cat":
return new Cat();
default:
return null;
}
}
}
·数组去重
利用HashSet来完成数组的重复,再用toArray()方法来把list转换为数组,最后要排序(不排序会有很多1),再返回
import java.util.HashSet;
import java.util.Set;
import java.util.Arrays;
public class Solution {
public Integer[] deDuplicate(Integer[] arr) {
Set<Integer> ls =new HashSet<Integer>();
for (int i:arr){
ls.add(i);
}
arr=new Integer[ls.size()];
arr=ls.toArray(arr);
Arrays.sort(arr);
return arr;
}
}
·字母变换
用int来获取对象的ACSII值,然后变换过后返回
ACSII码
65-90:A-Z
97-122:a-z
48-57:0-9
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
char[] chars=scanner.next().toCharArray();
for (int i=0;i<chars.length;i++){
int val=chars[i];
val=90-val+65;
chars[i]=(char) val;
}
System.out.println(String.valueOf(chars));
}
}
·获取素数
在第二个循环中加入一个boolean值,根据这个值来返回第一个循环中的值
public class Main {
public static void main(String[] args) {
for (int i=2;i<=100;i++){
int m=(int)Math.sqrt(i);
boolean ispRrime=true;
for (int j=2;j<=m;j++){
if (i%j==0){
ispRrime=false;
}
}
if (ispRrime){
System.out.println(i);
}
}
}
}
·逆序输出整数(回文)
1、字符串翻转
Scanner scanner=new Scanner(System.in);
String str=scanner.next();
String s=new StringBuffer(str).reverse().toString();
System.out.println(Integer.valueOf(s));
2、以int型来做
Scanner scanner=new Scanner(System.in);
int temp=scanner.nextInt();
int resultint =0;
while (temp!=0){
resultint=resultint*10+temp%10;
temp/=10;
}
System.out.println(resultint);
·顺序输出
for循环即可
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int i=scanner.nextInt();
for (int j=1;j<=i;j++){
System.out.println(j);
}
}
}
学习时间:
2021-8-11 9:00-11:45、13:30-17:30 20:00-22:32
学习产出:
学习博客*1
刷题*6