Java基础和常见问题

JavaBasic

 

Java 是强类型语言 数据类型不可以 直接处理 需要先初始化

 

 

数据类型

数据类型分为

  1. 基本类型(primitive type)

     

  2. 引用类型 (reference type)

​
    int i =10; //10进制  输出10
    int i2=010; //八进制0  输出8 
    int i3=0x10 //十六进制0x  输出16
​
    float f = 0.1f;  //0.1
    double d = 1.0/10; //0.1
    
    f==d; //false
​
    float d1 = 231313131313;
    float d2 = di+1;
    d1==d2; //true
  

float 数据类型会出现上述问题 不要用浮点数进行比较。 float 不准确。需要大的数可以用bigdecimal 来计算和比较。

    char c1 = 'a';
    char c2 = '中';
    System.out.println(c1);
    System.out.println(c2);
    System.out.println((int)c1);
    System.out.println((int)c2);
    

输出值不一样 (int) 进行了强行转换 文字的本质还是数字

97=a 65=A

char c3 = '\u0061';  // 输出 a
​
​

来自于转义字符_百度百科 (baidu.com)

\a响铃(BEL)007
\b退格(BS) ,将当前位置移到前一列008
\f换页(FF),将当前位置移到下页开头012
\n换行(LF) ,将当前位置移到下一行开头010
\r回车(CR) ,将当前位置移到本行开头013
\t水平制表(HT) (跳到下一个TAB位置)009
\v垂直制表(VT)011
\代表一个反斜线字符'''092
'代表一个单引号(撇号)字符039
"代表一个双引号字符034
\?代表一个问号063
\0空字符(NUL)000
\ddd1到3位八进制数所代表的任意字符三位八进制
\xhh十六进制所代表的任意字符十六进制
​
boolean flage = true;
if(flage){   //老手 
}
if(flage==true){  //新手 但是推荐新手用 
}

 

数据类型的转换

运算中,不同类型的数据需要先转化为同一类型,在计算。

强类型转换 由高到低

int i = 128;
byte b = (byte) i //内存溢出 
    //b 范围 -128 到 127
    // (类型) 变量
    

自动类型转换 由低到高

int i = 128;
double b = i; //b = 128 自动转换

注意点:

  1. 不可以对布尔值boolean 转换

  2. 不能把对象类型转换成不相干的类型

  3. 在把高容量到低容量时,强制转换

  4. 转换有可能有内存溢出和精度问题

(int) 23.7 //23
(int) -45.89f //-45
char c = 'a'; // 97
int d = c+1; // d=98
char(d)  // int转换为char  输出 b 

操作数据大的时候 注意溢出问题:

int money = 10_0000_0000; //_ 不会输出 方便观看
int years = 20;
int total = money * years;
//total 应该是 200_0000_0000 
//但是返回-1474836488
long total2 = money * years; //依然不对 在转换之前就已经出错了
long total3 = money * ((long)years); //此时才对
​

变量

像学的方程 x 就是变量 一个可以变化的量

每个变量都必须声明类型

注意事项:

  • 每个变量必须要有类型 --1.基本类型(primitive type) 2.引用类型(reference type)

  • 变量名必须和法,不可以使用关键字作为变量名

  • 要是一个完整的语句最后要加上分号; 而且一定是英文的

int a, b, c; //同时定义 但是不推荐
//代码要有可读性
int a =1;
int b =2;
int c =3;
String name = "zzz"; //定义字符串
​

类变量

​
public class Demo{
    static double salary = 2500 //类变量
    public void main(String[] args){
     System.out.println(salary); //直接输出
    }
}

 

实例变量

public class Demo{
    //不需要初始化
    int age;  //实例变量
    String name; //实例变量
    public void main(String[] args){
        Demo o = new Demo();
        o.age; //使用  0
        o.name; //使用  null
     //除了基本类型都是默认null
    }
}

 

局部变量

public class Demo{
    
    public void main(String[] args){
        //变量在这里是局部变量
        //需要声明和初始化
        //只作用在方法里
    }
}
​
​
    

常量

一但定义就不可以改变的。 key word: final

static final double number = 1.1;
final static double number = 1.1; 
//都可以 修饰符 final 和 static 顺序不影响
​

命名规范

变量 方法 类名:见名知意

  • 成员变量: everyDay 首字母小写后面的单词首字母大写

  • 局部变量:首字母小写 驼峰原则 同上和成员变量相似

  • 常量:大写字母和下划线 MAX_NUMBER

  • 类名:开头字母大写 Demo

  • 方法名: 首字母小写 big() veryBig()

 

运算符

算数运算符 + - * / %(求余数)++(自增) --(自减)

常见问题

int a = 10;
int b = 20; 
int c = 25;
int d = 25;
System.out.println(a+b); //输出 30
System.out.println(a-b); //-10
System.out.println(a*b); //200
System.out.println(a/b); //0 问题出现 应该是 0.5 
// 因为是int 类导致小数省略
System.out.println(a/(double)b);
// 通过强转可以排除这个错误
​
long a = 121231231L;
int b = 123;
short c =10;
byte d = 8;
// 里面有long 则为long 如果有double则为double
// 没有这则为 Int
System.out.println(a+b+c+d;) //Long
System.out.println(b+c+d); //Int
System.out.println(c+d); //Int
​
​
//++ --
int a = 3;
a++; // a = a+1  a =4
int b = 3;
b--; // b = b-1  b = 2
​
int a = 2;
int b = a++; 
System.out.println(b); // a=3
System.out.println(b); //b 依然是2 之后再运行 ++ 
// a++ 和 ++a 是不同的 ++a先运算还是 a++ 先赋值
​
//特殊幂运算 有一些再Math类的工具来操作
Math.pow(2,3); //2 的三次方 2^3

 

关系运算符

总是会返回一个布尔类型的值

int a = 10;
int b = 20;
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b); //不等于
​

逻辑运算符{|| (or) &&(and) !(not}

boolean a = true;
boolean b = false;
​
​
System.out.println(a&&b); //二个为真则为真
System.out.println(a||b); //二个都为假则为假
System.out.println(!a&&b); //如果为真则变假 为假变真
​
//短路运算
b&&c  // b为false 就直接停止运行了
   
   

位运算

A = 0011 1100

B = 0000 1101

A&B = 00001100 //二个1 才为1

A|B = 0011 1101 //有一个1 则为1

A^B= 0011 0001 //相同为0 不同为1

~B= 1111 0010 //取反

<<    // 就是乘以2  效率极高
>>    // 就是除以2  效率极高
   
  0000 0000    0
  0000 0001    1
  0000 0010    2  
  0000 0011    3 
  0000 0100    4 

 

省事运算符(doge)

int a = 10;
int b = 20;
a+=b // 就是 a=a+b;
a-=b // 就是 a=a-b;
System.out.println(a+b); // 为 int 30
System.out.println(""+a+b); //为字符串 "1020"
System.out.println(a+b+""); // 为 "30"
​
​
x ? y : z //x==true 为y 否则为z
    
a==10 ? "相等":"不相等"; //会输出相等
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值