Day_1~Day_2

Day_1

初识Java

Java 的工作原理

  •  将.Java编译成.Class字节码文件(通过Javac.exe)
  • 通过Java.exe在 Jvm内存中 解释执行 字节码文件。

JDK和JRE

  • JDK是开发者工具包,包含JRE。
  • JRE是Java运行的环境,包括JVM.

Java的跨平台性

  • Java语言是跨平台的,每个平台都有自己独特的jvm(java虚拟机)。
  • Java只能在JVM中运行,不能直接在操作系统中运行。

保留字

 

 

 

 

 

 关键字和保留字均不能作为变量名、方法名、类名、包名、参数。

驼峰命名法

小驼峰式命名法(lower camel case)

  • 多个单词组合成一个字符串 第一个单词的首字母小写
  • 从第二个单词开始,首字母都要大写
  • 例如:myName,myFirstJavaProgram

大驼峰式命名法(upper camel case)

  • 多个单词组合成一个字符串 第一个单词的首字母大写
  • 从第二个单词开始,首字母都要大写
  • 例如:MyName,MyFirstJavaProgram

基本数据类型(jdk提供)

四类八种

  整型(byte、short 、int  、long)

  浮点型 (float 、 double)

  字符类型(char)

  布尔类型(boolean)

  • 根据JVM规范,在内存中boolean当作int处理,占4个字节

  • boolean数组当成byte数组处理,一个boolean元素占1个字节

整数的默认数据类型都是int,浮点数默认是double。

 

String属于引用数据类型中的类

conversion

  • byte、short、 char 运算转成int,和int运算也是转换成int
  • byte 、short、char 任意和long运算,提升为long
  • byte 、short、int、long和float,一律转换成float计算。
  • byte 、short、int、long、float与double,一律转换成double计算。结果都是double.

精度问题:

  • 当由大→小,会发生精度损失。
  • int ,long → float,可能会发生精度损失。
  • long →double,也可能有精度损失。

cast

  • 注意boolean类型不能通过强制转换语法转换。
  • 转换时注意取值范围。
向上转型(子类继承父类)[引用数据类型][自动类型转换]。
向下转型(子类扩充)[引用数据类型][强制类型转换]。
 byte b;
 b=1+2;  //不报错 数据类型针对变量。这里是常量
 int a = 1; 1是int类型,需要一个int类型来接收。
 b = a + 1; //报错

原码、反码、 补码

数在机器中是二进制的---机器数

原码:机器数的符号位加上对应真值的绝对值。

  • 1000 00001 -----> -1

反码:

  • 正数的反码是其本身。
  • 负数的反码是除符号位,其余各位取反。 1000 0001 的反码是 1111 1110

补码:

  • 正数的补码是其本身。
  • 负数的补码是反码+1;
     double a = Math.pow(2,3)//次幂
log: 8.0

运算位运算比较快 时间复杂度O(1)

三目运算符

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

  • 条件表达式是布尔表达式
  • 它是一个表达式,一定会有结果,需要有接收的地方。
  • 三目运算符是一种选择结构。

switch

switch:
expression:
a:byte
b:short
c.int
d:char
e:枚举类型
f:String
不能是boolean
case value1:
value1应该和expression的数据类型保持一致。

在两个布尔变量里if(boolean a ^ boolean b)就是 当a和b同真或同假时为真,不然为假。
/**
 * 3,有三个int变量,a, b, c假设三个变量中有两个变量的值相同,请问如何快速求出,那个和其他两个变量不同的第三个变量的值?(代码+截图)(提示:自己和自己异或为0,任何数和0异或的结果是自己)
 */
/**
 *
 * 方法一 三目运算符
 *
 */
        boolean c1 = (a==b);//true  不同为c  false
        boolean c2 = (a==c);// true 不同为b
        int temp = c1?c:c2?b:a;
        System.out.println("不同的数是:"+temp) ;
/**
 *
 * 方法二、逻辑
 *
 */
        if(a==b){
            System.out.println("不同的数是:"+c) ;//  不同的是c
        }else if(a==c){

            System.out.println("不同的数是:"+b) ;//  a和b不同,a和c相同,b为不同
        }
        else {
            //a和b不同 a和c不同 那么b和c相同
            System.out.println("不同的数是:"+a) ;
        }
        /**
         *
         * 自己和自己异或为0   任何数和0异或 是自己
         */

        System.out.println(a^a);
        System.out.println(a^0);
        int temp1 = ((a^b)==0) ?c:((a^c) == 0)?b:a;
        System.out.println("不同的数是:"+temp1) ;
    }

 


/**
 *
 * 4. 任给一个int类型的正整数,如何判断该整数的值,是否是2的整数次幂?(代码+截图)
 * (提示:任何是2整数次幂的十进制数的二进制有效位都只有一个1)
 *     感觉是正整数
 *
 * 分析; 2的一次幂   10
 * 2 2 --=4 ---->   100
 * 2 2 2  = 8       1000
 *  1000
 *  0111
 *  0000
 *  查阅资料 二进制减一 &   是否为0
 *  1001
 *  1000
 *  1000
 */
public class fourwork {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int b = 2;
        // 0000 0010
        // xxx
        System.out.println("请输入一个整数:");
        int input = sc.nextInt();
        if( input < 0 ){
            System.out.println("请输入一个正整数");
            return;
        }
        /**
         *
         * /2取余
         */
        int pow = input%2;
        if(pow == 0){
            System.out.println(input+"是2的整数次幂");
        }else{
            System.out.println(input+"不是2的整数次幂");
        }
        /**
         *
         * 二进制
         */
        if((input & input-1)== 0){
            System.out.println(input+"是2的整数次幂");
        }else{
            System.out.println(input+"不是2的整数次幂");
        }

    }
**
 *
 * 7,2. 判断一个5位数是否是回文数(比如12321)
 * 个位等于万位
 * 十位等于千位
 *
 * 不用遍历...
 * 12321/10000=1 %10 0   --- 个位    123321
 * 12321/1000=12 % 10 2
 * 12321/100=123 %10  3
 * 12321/10=1232  ....
 * 12321/1=12321  --万位
 *思路来源网络
 *
 */
public class sevenwork {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个五位数:");
        int input = sc.nextInt();
        if(input < 0 ){
            System.out.println("输入错误!");
            return;
        }
        int gewei = input/10000 %10 ;
        int shiwei = input/1000 %10;
        //int baiwei = input/100 %10;
        int qianwei = input/10 %10;
        int wanwei = input/1 %10;
        if(input/10000 > 10 || gewei ==0 ){
            System.out.println("不是一个五位数");
            return;
        }
        if(gewei == wanwei && shiwei == qianwei){
            System.out.println(input + "是一个五位回文数");
        }else{
            System.out.println(input + "不是一个五位回文数");
        }

    }

 




posted @ 2021-01-02 14:05  多米_dmxq#top  阅读(177)  评论(0)    收藏  举报