Java学习笔记——基础知识

java的概述与环境搭建

Java三大体系

JavaSE:Java标准版

JavaEE :j2EE Java企业及开发

JavaME:移动端 Android

Java语言和平台无关性

源码文件.java经过javac命令编译生成.class(字节码文件),把这个文件放到只要有vim的机器上就能运行(windows、linux)

编写代码的时候是在windows,而最终的项目会部署到linux下去运行

java的运行机制

编译执行

将源文件编译成机器码,一次编译,多次执行

执行效率高,但不可跨平台

解释执行

将源代码一行一行解释,一行一行执行

不同操作系统具备不同的解释器

执行效率低,可以跨平台

先编译、再解释

将源文件编译成字节码文件(平台中立文件.class),再将字节码文件进行解释执行

Java设计理念:Write Once Run Anywhere

Java的环境搭建

JVM

Java Virtual Machine 虚拟机

使用软件在不同操作系统中,模拟相同的环境

JRE

Java Runtime Environment 运行环境

包括JVM和解释器,完整的Java运行环境

JDK

Java Development Kit 开发环境

包括JRE+类库+开发工具包(编译器和调试工具)

常用的Dos操作

  • wins+R打开运行窗口

  • 盘符切换:d:

  • 查看当前目录下的所有文件:dir

  • 切换目录:cd(change directory)+文件名

  • 返回上一级目录:cd …

  • 清理屏幕:cls(clean screen)

  • 退出终端 exit

  • 查看电脑ip ipconfig

  • 打开应用

    ​ calc mspaint notepad

  • ping命令
    ping www.baidu.com

  • 文件操作
    md 目录名
    rd 目录名
    cd>文件名
    del 文件名

Class的介绍(类)

  1. 同一个源文件可以定义多个类。编译后,每个类都会产生独立的.class文件。一个类中,只能有一个主函数,每个类都可以有自己的主函数
  2. public修饰的类称为公开类,要求类名与文件名必须完全相同
  3. 一个源文件中,只能有一个公开类

Package的介绍(包)

  1. 作用:类似于文件夹,用于管理字节码文件(.class)

  2. 语法:package 包名;

  3. 位置:必须写在源文件第一行

  4. 带包编译:javac -d .源文件名称.java(自动生成目录结构)

  5. 包的命名规范

    • 不能用Java开头

    • 域名.公司名.项目名.模块名 eg: com.lanou.shopping.service

Java的语言规范

  1. 书写格式

    层级之间必须缩进

  2. 代码注释

    注释是给程序员看的。所以注释不会在class文件中生成

    • 单行注释//

    • 多行注释/**/

    • 文档注释/** */

    ​ 是用来生成帮助文档的。类、属性、方法上面,写对于类、属性、方法的一个解释,生成文档(javadoc),去看源码的时候可以看文档

    文档注释和多行注释不能相互嵌套

    单行注释 ctrl+/ 取消注释ctrl+/

    多行注释 ctrl+shift+/ 取消注释 ctrl+shift+\

  3. 标识符命名问题

  • 用来取名字的

类名、参数名、属性名、方法名

  • 标识符的结构:26个大小写字母构成,数字,下划线_,$,而且不能以数字开头,还不能为Java的关键字和保留字

  • 关键字:

package,import,class public protected,private,byte,short,int,long,float,double,char,boolean,true,false,if else,switch,case,break,default,for,while,do,break,continue,new,void return,static,final,null,extends,this,super,abstract,interface implements instanceof,tra,try,catch finally,transient,synchronized,enum

  • 保留字:goto,const

Java语言基础

变量

  1. 计算机内存的一块存储空间,是存储数据的基本单位
  2. 组成部分:数据类型 变量名 值
  3. 变量的值可以改变
  4. 声明方式
    • 先声明,再赋值——数据类型 变量名; 变量名 = 值;
    • 声明并赋值——数据类型 变量名=值;
    • 多个同类型变量的声明与赋值——数据类型 变量1,变量2=值;

数据类型

数据类型分类

基本数据类型
  1. 整数类型 (数字范围:-2(位数-1)——2(位数-1)-1)
    • bit(位):计算机最小存储单元
    • byte(计算机基本单位) 1个字节 1byte=8bit -27—27-1
    • short短整型 2个字节 16位 -2^15 —2^15-1
    • int整型 4个字节 32位 -2^31 — 2^31 -1
    • long长整型 8个字节 64位 -2^63 — 2^63-1
  2. 小数类型
    • float 单精度 32位 小数有效位:7位

    • double 双精度 64位 小数有效位:15位 d/D

      在Java程序代码里面看见的整数都是int型,小数都是double类型
      
      在程序里写的一个数字超过了int类型,在定义long类型的时候需要在数字后面加l\L
      
      在定义float的时候如果是小数,需要在数字后面加F/f
      float f = 1.23f
      
  3. 布尔类型(boolean不能参与运算)
    • true
    • false
  4. 字符类型

    char:字符

    A—Z 65—90

    a—z 97—122

引用数据类型
  1. 字符串——String
  2. 数组
  3. 对象

数据类型的转换

自动类型转换

两种类型相互兼容,目标类型大于源类型

强制类型转换

两种类型相互兼容,目标类型小于源类型

运算符

算术运算符

+* / %  ++ ——

进行四则运算的时候除了byte、short这两个之外

int long float double相同运算类型进行计算时,类型不变

不同类型运算则取运算类型最大的作为计算结果的类型

byte和short进行运算时,类型取int

i++

i–

++i

–i

单独的时候则是自加减

参与运算的时候

i++/i-- 先做运算,再自加减1

++i/–i 先自加减1 再做运算

范围是环形循环

赋值运算符

= += -= *= /= %=
a = b;
a += b;  //a = a + b;
a -= b;  //a = a - b;
a *= b;  //a = a * b;
a /= b;  //a = a / b;
a %= b;  //a = a % b;

1、计算1 + 2 + 3 + … + 100之和

int i = 1;
int sum = 0;
while(i <= 100){
    sum += i;
    i++;
}

2、计算5!的阶乘

int i = 5;
int temp = 1;
while(i > 0){
    temp *= i;
    i--;
}

比较运算符

== < <= > >= !=

逻辑运算符

&&   &   ||   |  !

短路且(&&):判断依据:全部为真则为真

​ 如果短路且前面的表达式返回false,则结果已经为false,则后面的表达式不会运算

int i = 1;
if(false && i++ > 12){    
}
System.out.println(i);
输出:i=1;

短路或(||):判断依据:一个为真则为真。如何短路:前面为真,后面的就不会做运算

& |:不短路,其余一致

!:非

三目运算符

三元运算符

返回boolean类型的表达式?值1:值2

int i = 12;
int j = 34;
int max = i > j?i:j;

位运算符

  • & 按位与

  • | 按位或

  • ^:异或 相异则为1

  • 原码

  • 反码

  • 补码

  • 按位取反(符号位参与取反)

​ 负数的按位取反:A -(A+1) eg: -17 16

​ 正数的按位取反:

  • << 左移,相当与*2

左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0

x<<y : x*2^y

  • >> 右移,正数高位补0,负数由计算机决定

右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

x>>y:x/2^y

控制台输入

Scanner是用来获取用户输入的数据的

操作顺序:

  1. 导入包——import java.util.Scanner;(在代码最上方)

  2. 声明——Scanner 自定义名字 = new Scanner(System.in);

  3. 使用Scanner类中对应的函数(区分类型)

  4. char ch = sc.next();
    

    next(); 只能获取第一个空格之前的字符串

    nextLine(); 获取一行

    • .nextInt();//获得整数
    • nextDouble();//获得小数
    • next();//获得字符串
    • next();charAt();//获得单个字符(数值控制第几个字符,0是第一个,依次类推)

Java选择结构与分支结构

三大结构

顺序结构

分支结构

if分支
单分支
if(){
    
}
双分支
if(){
    
}else{
    
}
多分支
if(){
    
}else if(){
    
}else{
    
}

多分支:注意:对于多分支会存在多个条件,这么多个条件有可能多个条件返回true,它只会进入第一个满足条件的分支,后面满足条件的分支是不会去执行的。

Switch分支
switch(表达式){ //表达式:byte short int char string enum
        case1;
        	break;
        case2;
        	break;
        
    default:
        	break;
}

swich语句的穿透:switch语句进入某一个case执行代码,如果这个case里面没有break,会出现穿透,会进去下一个case继续执行代码,直到遇到break,

eg:

输入月份,打印相应的季节。春345、夏678、秋9 10 11、冬12 1 2

import java.util.Scanner;
class Demo{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你的月份");
        switch(sc.nextInt()){
            default:
                System.out.println("你的月份输入有误!!!!");
                break;    
            case 1:
            case 2:
            case 12:
                System.out.println("冬天");
                break;
            case 3:
            case 4:
            case 5:
                System.out.println("春天");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏天");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋天");
                break;
        }
    }
}

Java循环结构

通过某个条件,重复执行的一段逻辑代码

for循环

for-i循环

语法:

for(初始值;表达式(判断条件);变量更新){ 
    			//初始值可以放在for循环前面;表达式返回true进入循环体;更新可以放在for循环里的最后
    
}
for-each循环

for循环的加强循环,一般是用来遍历一个容器,去获取容器里面的所有元素

for-each循环遍历容器,每次是直接获取容器里的元素

for(容器里面元素的类型 变量名:容器的对象){
    
}

while循环

while(返回boolean类型的表达式){//表达式包括方法
    //循环体
}

do while循环

do{
    //循环体
}while(返回boolean类型的表达式);

对于do while,先执行do里面的循环,然后再去判断是否为TRUE,为TRUE则继续执行do里面的操作,所以do while至少执行一次

首次没有入口条件

先执行再判断

while();
for();

流程控制

break

  1. 终止、跳出Switch、循环结构
  2. 循环执行中,遇到break,则退出整个循环结构

continue

  1. 结束本次、进入下一次循环
  2. 循环执行中,遇到continue,则跳过本次,进入下一次循环

补充:

System.out.print();

System.out.println(); 换行

1.XXX是什么
2.XXX从何而来
3.XXX出现是为了解决什么问题
4.XXX是自上而下推导的,还是自下而上抽象的?是前者由何推导,是后者由何抽象?(如果由技术抽象总结的概念,就去看技术具体实现)
5.XXX为何有效?
6.XXX是历史必然出现的选择吗?为什么
7.XXX如何实现

将面向对象、封装、继承、多态、抽象带入XXX一个个提问,如果都能回答上来,那么就算弄懂了这个概念了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值