吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3339|回复: 9
收起左侧

[Java 转载] 第一章 –– Java基础语法

  [复制链接]
小可爱~ 发表于 2018-8-23 21:26
本帖最后由 wushaominkk 于 2018-8-24 14:39 编辑

一丶运算的前提是数据类型必须一致掌握
(1) 观点一:(掌握)// A: byte short char-int-long-float-double 默认大小转化时向最大的数据类型靠近, (除了 下面的观点的数据类型外)// B: byte short char 在运算时默认转化成int 类型进行运算// A: byte short char-int-long-float-double// B: byte short char 在运算时默认转化成int 类型进行运算
@Test
public void test1() {
byte b = 4;
int i = 3;
//  int sum = b + i;
//  byte sum = b + i;
short s = 2;
byte b1 = 1;
// (1) 验证成功, byte short char 在运算时默认转化成int 类型进行运算
//  short sum = s + b1;
System.[i]out.println("sum = " + sum);
}

注意: double和float精度不正确问题,二进制问题,使用大数据类型BigDecimalsize=1.25 [size=1.25]面试题[size=1.25]:([size=1.25]掌握[size=1.25])/ 面试题: byte b1=3,b2=4,b; b=b1+b2; b=3+4;  哪句是编译失败的呢?为什么呢?  b = b1 + b2;是有问题的。  因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。  常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。/
class DataTypeDemo6 {
public static void main(String[] args) {
//定义了三个byte类型的变量,b1,b2,b3
//b1的值是3,b2的值是4,b没有值
byte b1 = 3,b2 = 4,b;

//b = b1 + b2; //这个是类型提升,所有有问题

b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
}
}
注意:(掌握)常量之间的运算结果是在编译成字节码文件时便被计算完毕, 成为一个新的常量例如: int a = 3 + 7 编译后便成为 int a = 10, 即使是 int a = 0;  a = 3 + 7;, 在编译时也会变成 int a = 3 + 7; 这就是编译器的优化效果, 但是常量是存在数据类型, 从 c++ 方面便可简单的看出来  const int a = 10; 这个便是常量, 在java中也是存在常量 的  例如 : private final String str = "aaaa"还存在常量对象, private final String str1 = new String("aaa");还有 从 float 和 double 类型的常量可以看出来常量存在数据类型. 0.01f这些都是常量 (3)案例思考题:(掌握)
class DataTypeDemo6 {
public static void main(String[] args) {
//定义了三个byte类型的变量,b1,b2,b3
//b1的值是3,b2的值是4,b没有值
byte b1 = 3,b2 = 4,b;

//b = b1 + b2; //这个是类型提升,所有有问题

b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
}
}

class DataTypeDemo6 {
public static void main(String[] args) {
//定义了三个byte类型的变量,b1,b2,b3
//b1的值是3,b2的值是4,b没有值
byte b1 = 3,b2 = 4,b;

//b = b1 + b2; //这个是类型提升,所有有问题

b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
}
}

// 思考题3:
// byte b1 = 3, b2 = 4, b;
// b = b1 + b2;
// b = 3 + 4;
@Test
public void test4()
{
byte b1 = 3, b2 = 4, b;
// b1 b2 在运行时, 类型提升了, 所以有问题
//  b = b1 + b2;
// 常量, 先把结果计算出来, 然后看是否在 byte 的范围内,
// 如果不在就报错
b = 3 + 4;
System.[i]out.println(b);
b = 10;
System.[i]out.println(b);
}

// 思考题2:
// 下面这两种方法有没有区别??
// float f = (float)12.345;
// float f = 12.345f;

// 一个是强制转化, 一个是原先就是 float 类型
@Test
public void test3()
{
// 但是我在反编译之后发现 这下面两句都一样的处理方式
float f = (float)12.345;
float f1 = 12.345f;
}

[size=0.942]// [size=0.942]思考题[size=0.942]1:
// double d = 12.345;
// float f = d; ???
@Test
public void test2()
{
double d = 12.345;
float f = (float) d;
System.[i]out.println(f);
}// A: byte short char-int-long-float-double
// B: byte short char 在运算时默认转化成int 类型进行运算
@Test
public void test1()
{
byte b = 4;
int i = 3;

//    int sum = b + i;
//    byte sum = b + i;
short s = 2;
byte b1 = 1;
// (1) 验证成功, byte short char 在运算时默认转化成int 类型进行运算
//  short sum = s + b1;
//  System.out.println("sum = " + sum);
}
(4) 交换两个变量的方式, 面试题(掌握)// 思考题1
// 交换两个变量值的话题, 解决方案, 平时使用和面试使用
@Test
public void test1()
{
int a = 10;
int b = 20;

// 方式一: 使用第三发变量存储 工作中使用...

//  int tmp = a;
//  a = b;
//  b = tmp;
//  System.out.println("a = " + a + " b = " + b);

// 方式二: 面试专用, 使用 a ^ b ^ b ==> a 的方法

// 效率最高
//  a = a ^ b;
//  b = a ^ b;  // b = a == (a ^ b) ^ b;
//  a = a ^ b;  // a = b == (a ^ b) ^ a
//  System.out.println("a = " + a + " b = " + b);

// 方式三: 用变量相加减的方法

//  a = a + b;
//  b = a - b;
//  a = a - b;
//  System.out.println("a = " + a + " b = " + b);

// 方式四: 一句话搞定

b = (a + b) - (a = b);
System.[i]out.println("a = " + a + " b = " + b);
}
(5) 运算符与和或(掌握) // 逻辑 && || 和 位 的 & 和 | 区分
// && 和 || 的短路效果
// && 出现左边是 false 右边就不执行了
// || 出现左边是 true 右边就不执行了
@Test
public void test2()
{
boolean a = false;
boolean b = true;
System.[i]out.println("(1)");
System.[i]out.println("a = " + a);
System.[i]out.println("b = " + b);
if (a != true || (b = false))
{
// 输出的值 是 true
System.[i]out.println("b = " + b);
}

a = false;

b = true;
System.[i]out.println("(2)");
System.[i]out.println("a = " + a);
System.[i]out.println("b = " + b);
if (b == false && (a = true))
{
System.[i]out.println("a = " + a);
}
}
(6) 面试题

/*
 * 面试题1
 * (1)
 * short s = 1;
 * s = s + 1;
 * (2)
 *  short s = 1;
 * s += 1;
 * */

@Test
public void test1()
{
short s = 1;
// 还是同一个问题
// 变量(short char byte )在运算的时候会被上升为 int
// 类型, 这个时候计算完毕, 但是赋值失败, 类型不符合
//      s = s + 1;
s += 1;
System.[i]out.println(s);
}

size=1.25 [size=1.25]位移运算符size=1.25// << 左移: 左边最高位置丢弃, 右边补齐0// >> 右移: 最高位是0 左边补齐 0; 最高位是1 左边补齐1// >>> 无符号右移: 无论最高位是 0 还是 1, 左边补齐 0@Test
public void test1()
{
//<< 把<<左边的数据乘以2的移动次幂
System.[i]out.println(3 << 2);// 12

//>> 把>>左边的数据除以2的移动次幂

System.[i]out.println(24 >> 2);// 6
System.[i]out.println(24 >>> 2);// 6

System.[i]out.println(-24 >> 2);// 6
System.[i]out.println(-24 >>> 2);// 乱码
}
/*
计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100

>>的移动:  
计算出24的二进制:11000

原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000

    11111111 11111111 11111111 11101000
    1111111111 11111111 11111111 111010(00) 补码

    补码:1111111111 11111111 11111111 111010

反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110

结果:-6

>>>的移动:
    计算出24的二进制:11000

原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000

    11111111 11111111 11111111 11101000
    0011111111 11111111 11111111 111010(00)

结果:
*/

size=1.25 [size=1.25]面试题

/        面试题:    请用最有效率的方式写出计算2乘以8的结果?        2 8                2 << 3        */
(9) 三目运算符(要会)--------------------------------------------------------------------------------// 1. 获得两个数的最大值    // 2. 获得三个数的最大值    // 3. 比较两个整数是否相等        @Test
public void test3()
{
// 3. 比较两个整数是否相等
int m = 20;
int n = 10;
boolean flag = (m == n) ? true : false;
System.[i]out.println(flag);
}
@Test
public void test2()
{
// 2. 获得三个数的最大值
int x = 10;
int y = 30;
int z = 20;

// (1)
int tmp = (x > y) ? x : y;
int max = (tmp > y) ? tmp : y;
System.[i]out.println("max = " + max);
// (2) 一步到位
int max1 = (x > y) ? (x > z ? x : z) : (y > z ? y : z);
System.[i]out.println("max1 = " + max1);
}
@Test
public void test1()
{
// 1. 获得两个数的最大值
int x = 10;
int y = 20;
int max = (x > y) ? x : y;
System.[i]out.println("max = " + max);
}

[size=0.875]--------------------------------------------------------------------------------
注意:// 写一个程序需要考虑:
// (1) 成功的数据
// (2) 错误的错误
// (3) 边界问题二、switch的使用方法1. switch(表达式)中表达式的返回值必须是下述几种类型之一:byte,short,char,int,枚举,String; 2. case子句中的值必须是常量,且所有case子句中的值应是不同的; 3. default子句是可任选的,当没有匹配的case时,执行default 4. break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾5. 附加跳出多层循环的方法,  goto tab;   三、方法的重载(overload)1、重载的概念在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。2、重载的特点与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。------ 这个和函数签名有关, 函数签名只要函数名和函数参数, 并没有函数的返回值3. 重载示例//返回两个整数的和 int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}
public class PrintStream{
public static void print(int i) {……}
public static void print(float f) {……}
private static void print(String s) {……}
public static void main(String[] args){
[i]print/i
[i]print/i
print(“hello!”);
}

  1. 判断方式:与void show(int a,char b,double c){}构成重载的有:a)void show(int x,char y,double z){}   //no
    b)int show(int a,double c,char b){}   //yes
    c)  void show(int a,double c,char b){}  //yes
    d)  boolean show(int c,char b){}  //yes
    e)  void show(double c){}  //yes
    f)  double show(int x,char y,double z){}  //no
    g)  void shows(){double c}  //no
    函数重载只看参数个数和类型,不看返回值。
    例子:

以上三个函数都可以。但不能出现只是返回值不同的重载。如
int biggest(int a,int b,int c);
{
......
}
float biggest(float a,float b)
{
......
}
float biggest(float a,float b,float c)
{
......
}

四、体会可变个数的形参//下面采用数组形参来定义方法public static void test(int a ,String[] books);

//以可变个数形参来定义方法
public static void test(int a ,String…books);

说明:1.可变参数:方法参数部分指定类型的参数个数是可变多个2.声明方式:方法名(参数的类型名...参数名)3.可变参数方法的使用与方法参数部分使用数组是一致的4.方法的参数部分有可变形参,需要放在形参声明的最后 public void test(String[] msg){
System.[i]out.println(“含字符串数组参数的test方法 ");
}
public void test1(String book){
System.[i]out.println(“与可变形参方法构成重载的test1方法");
}
public void test1(String ... books){
System.[i]out.println("形参长度可变的test1方法");
}
public static void main(String[] args){
TestOverload to = new TestOverload();
//下面两次调用将执行第二个test方法
to.test1();
to.test1("aa" , "bb");
//下面将执行第一个test方法
to.test(new String[]{"aa"});
}
五、方法的参数传递1. 方法,必须有其所在类或对象调用才有意义。若方法含有参数:Ø形参:方法声明时的参数Ø实参:方法调用时实际传给形参的参数值2. Java的实参值如何传入方法呢?       Java里方法的参数传递方式只有一种:值传递。  即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
六、字段名和属性名的概念Bean层的属性名和变量名
属性名便是在方法 set 和 get 之后的名字便是属性名
属性名不再是变量的名字

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
MoeKotoki + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wanggangv2 发表于 2018-8-23 21:40
学习了。
青鸾火凤 发表于 2018-8-23 21:41
willgoon 发表于 2018-8-23 21:45
百度里已经有很多教程了 难得楼主这么有心又整理了一个 赞一下
wangqiustc 发表于 2018-8-23 23:08
我在吾爱学java
Norton 发表于 2018-8-23 23:10
跟着楼主学习一下
出席者 发表于 2018-8-24 08:28 来自手机
等你 笔记
六月莫竹 发表于 2018-8-24 08:49
我在吾爱学java
超级芳 发表于 2018-8-24 08:51
干货 干货!
打酱油的店小五 发表于 2018-8-24 14:34
查漏补缺,挺好的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-16 07:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表