java基础一(语法 JVM内存结构 重载)

1.dos命令
dir 查看当前目录的文件
cls 清屏
cd \ 回到根路径
ipconfig 查看ip地址
ipconfig /all 查看更详细的网络信息
这个详细信息中包括网卡 的物理地址,例如:70-8B-CD-A7-BA-25
这个物理地址具有全球唯一性,物理地址通常叫做MAC地址

怎么查看两台计算机是否可以通信?
ping命令
语法格式:
ping IP地址
ping 域名
ping www.baidu.com
ping 61.135.168.121 (百度的IP地址)
ping 61.135.168.121 -t 一直ping 目的:查看网络是否稳定

执行域名和ip都可以访问百度,域名底层会被解析成ip地址

2.常用快捷键
home 光标回到行首
end 光标回到文件末尾
ctrl +home 光标回到文件开头
ctrl +end 光标回到文件末尾
ctrl + Y 重做(与ctrl+X 撤销相反)
ctrl + shift + 左键 选择一个单词
ctrl + shift + 右键 选择右边一个单词
在这里插入图片描述

3.Java语言的特性

  1. 简单性
    在Java语言中真正操作内存的是:JVM(java虚拟机)
    所有的java程序都是运行在java虚拟机当中的
    而java虚拟机执行郭晨高中再去操作内存
    对于C或者C++来说程序员可以通过指针操作内存
    C或者C++更灵活,可以直接程序操作内存,但是要求程序猿技术精湛
    C语言或者C++更有驾驭感

    飞机航行:
    如果是C语言表示程序员是飞机驾驶员
    如果是java语言表示程序员是飞机上的乘客

    java语言底层是C++,所以JVM是用C++语言写好的一个虚拟的电脑。
    JVM在哪里里?告诉大家。安装JDK之后,JVM就代表安装好了

    内存是什么?
    对于计算机来说,最主要的几个部件是什么?

    • CPU:
      中央处理器,相当于人类的大奥,负责发送并执行命令
      是整个计算机的指挥官
      cpu 是负责计算的,负责运算的
      10 + 20 = 30
      cpu负责将30这个计算结果计算出来
      但是在计算过程中有三个数据需要临时找个空间存储一下,
      这三个数据分别是: 10 20 30
    • 内存:
      程序运行过程中的临时数据存储空间
      断电之后或者关机之后内存中的数据就消失了
    • 硬盘:
      持久化设备,硬盘上的数据不会应为断电而消失
    • 主板:
      相当于人类的躯干,是一个载体
      cpu,内存条,硬盘等主要的部件都是放在主板上的
      主板上有很多线,将以上的部件链接起来
  2. java是堪称完全面向对象的
    采用面向对象的方式可以让复杂问题简单化

  3. 健壮性
    主要是因为java中有一种机制
    自动回收机制(GCj机制)
    Java语言是健壮的,相对于C语言来说,C语言没有java健壮
    Java不容易导致内存的泄漏
    C++或者C语言使用不当时很容易导致内存泄漏

    JVM负责调度机制,程序员不需要干涉

    以上讲解中描述了这几个术语:
    JVM(C++语言写的一个虚拟计算机)、GC(垃圾回收机制)

  4. java完全/完美支持多线程并发

  5. 可移植性/跨平台
    java语言一次编写,到处运行(平台改变了,程序不需要改变)
    jVM怎么来的?在安装JDK的时候自带JVM
    所以JDK也有不同版本,window版的JDK,有Linux版本的JDK

JVM这种机制实现跨平台,那么这种机制优点和缺点分别是什么?
优点::一次编写到处运行,可跨平台
缺点:麻烦,对于运行java程序来说必须现有一个JVM
就像你想在网页上看视频,你必须安装一个flash是一样的

4.JDK,JRE,JVM三折之间的关系?

  • JDK:java开发工具箱

  • JRE:java运行环境

  • JVM:java虚拟机

    JDK包括JRE和JVM

JVM不能独立安装
JRE和JDK可以独立安装
有单独的JDK安装包,JRE安装包,没有单独的JVM安装包

安装JDK:JRE自动安装了,同时JRE内部的JVM也就自动安装了
安装JRE:JVM也就自动安装了
在这里插入图片描述

问题:假设你在软件公司开发了一个新的软件,现在要去客户那边给客户把项目部署一下,把项目跑起来,你需要安装JDK吗?
只需要安装JRE就可以了
JRE体积小,安装非常便捷

术语总结:
JavaSE:标准版 JavaEE:企业版 JavaME:微型版
安装JDK后:JDK,JRE,JVM

5.对java加载与执行的理解
java程序从编写到最终运行中间经历的过程?
编译阶段:普通文本到字节码的过程
运行阶段
注意:java程序员直接编写的java代码是无法被JVM识别执行的,java程序员编写的代码这种普通文本必须经过一个编译,将这个普通文本转变成字节码,JVM能够是被字节码

编译阶段和运行阶段可以在不同的操作系统上完成吗?
在window上编译
编译之后生成“字节码”
把“字节码”完全放到linux上运行
完全可以, 因为java是跨平台的
可以做到一次编写,到处运行

java源代码一旦编译之后,源代码可以删除吗?只留下字节码可以执行吗?
完全可以执行,因为源代码不参与程序的执行过程
参与程序执行过程的是字节码,
但是最好不要删除源代码,因为有可能执行结果不是你需要的。
当执行结果不是你需要的时候,你可以重新打开源码进行修改,
然后重新编译 生成新的字节码,再重新执行,这样会有新的执行结果
在这里插入图片描述

放源码的文件扩展名必须是:XXX.java
并且需要注意的是:编译生成的字节码文件扩展名是:XXX.class
没有为什么,死记硬背吧!!!!

另外需要注意的是:
1个java源文件可以编译生成多个class文件最终运行的是class文件
问题:字节码文件是二进制文件吗?
字节码文件不是二进制文件
如果是二进制文件的话,就不需要JVM了
因为操作系统可以直接执行二进制

6.java从开发到运行经历了什么?

在这里插入图片描述

注意:在以上的过程中,需要使用两个非常重要的命令?

  • javac命令,负责编译
  • java命令,负责运行

7.编写Helloworld

在这里插入图片描述

编译java源文件
javac 路径\Helloworld.java(执行完会生成Helloworld.class类文件)

运行java程序需要哪些步骤?
第一步:先使用cd命令切换到Helloworld.class所在的目录
第二步:java Helloworld(java后面跟类名 不能写Helloworld.class)

8.”java HelloWorld“ 的执行过程以及原理?
第一步:会先启动JVM
第二步:JVM启动之后,JVM会启动类加载器classloader
类加载器的作用:加载类的,本质上类加载器负责去硬盘上找“类”对应的字节码文件,
假设是”java HelloWorld“,那么类加载器会去硬盘上搜索:HelloWorld.class文件
假设是“java Test”,那么类加载器会去硬盘上搜索:Test.class文件

第三步:
类加载器如果在硬盘上找不到对应的字节码文件,会报错
类加载器如果在硬盘上找到对应的字节码文件,类加载器会将该字节码文件装载到JVM文件中,
JVM启动“解释器”将字节码解释成”1010100000“这种的二进制码,操作系统执行二进制码和硬件
交互
(默认情况下类加载器从当前目录加载)

问题????????
能不能给类加载器指定一个路径,让类加载器去指定的路径下加载文件?
classpath可以满足

需要在环境变量中创建一个name=classpath,地址写上需要加载的文件地址
配置完成后,只能在该目录下进行类文件加载

classpath环境变量的作用是什么?
是给类加载器指路的
没有配置环境变量classpath的时候,默认从当前路径下加载
如果配置了环境变量classpath的时候,只能从指定的路径加载

目前讲了三个概念:path java_home classpath,这三个环境变量只需要配置path

9.关于第一个java程序代码 的解释说明
// 单行注释
/*
多行注释
/
/
*
*java注释:这里的注释信息可以自动被javadoc.exe命令解析提取并生成到帮助文档中
*/

10.main方法,是程序入口(sun公司java 语言规定的)
JVM在执行程序的时候,会主动找这样一个方法。没有这个规规格的方法,程序无法执行
main方法也可以叫做主方法
注意:方法必须写在“类体”中,不能放到“类体”外面
任何程序都要有一个入口,没有入口进不来,无法执行

public class Test{
    public static void main(String[] args){
        //args可以改名字,对于主方法而言,只有这个位置可以改,其他位置不能动
        System.out.println("Test");//分号必须加,代表一行语句的 结束
    }
}

类体中放方法,而不是直接的Java语句
main方法中可以什么都不写
public的类可以没有,但是如果有,public的类名必须和源文件名保持一致,同时只能有一个public

11.标识符
只能由数字字母,下划线美元符号组成,不能含有其他符号
不能以数字开头
不能使用关键字做标识符
虽然java中的标识符严格区分大小写
理论上没有长度限制
凡是程序员自己命名的单词都是标识符
标识符可以标记:类名,方法名,变量名,接口名,常量名…
main是一个方法的名称,属于标识符
但是这个标识符不能修改,因为这个main是sun固定死的

文件命名123.java可以吗?
可以,完全可以,在window操作系统中123.java是文件名
只不过在123.java文件中无法定义public类

关键字:
在sun公司开发java语言的时候,提前定义好了一些具有特殊含义的单词,这些单词全部小写

12.变量
注意:在java中所有数据都被称为字面量
字面量可以分为很多种:
整数型,浮点型,布尔型,字符型,字符串型

public class VarTest{
    public static void main(String[] args){
        //以下三个10,占用3块不同的内存空间
        System.out.println(10);
        System.out.println(10);
        System.out.println(10);
        
        int i = 10;
        //以下的3次访问都是访问的同一块内存空间
        System.out.println(i);
        System.out.println(i);
        System.out.println(i);
    }
}

变量三要素?
数据类型 变量名 值(值是数据,就是字面量)

java中变量必须先声明,再赋值才能访问(必须手动赋值)
可以在一行声明多个变量,但是只会给最后一个赋值

int a,b,c =100   //  c =100  a,b只赋值不声明

成员变量和局部变量(成员变量也就是其他语言的全局变量)

13.数据类型

  • 基本数据类型:

    1.整数型:byte1,short2,int4,long8
    2.浮点型float4,double8
    3.布尔型:boolean1
    4.字符型:char2(java中规定字符型字面量必须使用单引号括起来 属于文字)
    引用数据类型:
    字符串String属于引用数据类型
    String字符串不属于基本数据类型范畴
    java中除了基本数据类型外,剩下的都是引用数据类型
    引用数据类型后期面向对象的时候才会接触

    有几个取值范围需要记住
    (1字节)byte类型取值范围:[-128-127],总共可以标识256个不同的数字 [-27~27-1]
    (2字节)short:[-32768,32767] 可以表示65536个不同的数字 [-215~215-1]
    (4字节)int:[-2147483648-2147483647] 可以表示65536个不同的数字 [-231~231-1]
    (2字节)char:[0-65535] 可以表示65536个不同的数字 [0~2^16-1]

    short和char实际上容量相同,不过char可以表示更大的数字
    因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字

    char可以存储1个汉字吗?
    可以的,汉字占用一个字节,java中的char类型占用2个字节,正好
    错误写法:
    char a = “x” //错误:String无法转换成char
    cahr a1 =‘xx’ //单引号只能放一个字符

  • 转义字符

    \t 表示制表符 tab(经测试\t属于1个字符)
    \n 表示换行
    \ 表示
    \u unicode编码是16进制的

  • 自动类型转换

    在java中,整数型字面量/数据,默认被当做int类型处理
    如果希望该整数型字面量被当做long来处理,需要在字面量后面添加L/l
    // 是否存在类型转换?
    // 不存在 在整型字面量后面加L,表示的是long类型字面量 ,
    //c是long类型,long类型赋值给long类型 不存在类型转换
    long c = 300L;

    // 是否存在类型转换?
    // 200字面量默认被当做int类型处理
    //b变量是long类型,int 4字节,long 8字节
    // 小容量可以转换成大容量,这种操作被称为:自动类型转换
    long b = 200;

  • 强制类型转换

    小容量转大容量,自动类型转换
    大容量转小容量,强制类型转换
    强制类型谨慎使用,会造成精度损失 byte = byte(300 ) => 44
    long = 2147483647 //不报错
    long = 2147483648//报错 值超出int的范围

  • 补码反码

    计算机在底层存储数据的时候,一律存储的是二进制的补码形式
    计算机采用补码形式存储数据的原因是:补码形式效率最高

    正数的原码补码反码都一样
    负数的反码等于原码取反(除符号位,其他位取反)
    补码 等于 反码+1

  • byte,short,char做混合运算

    做混合运算时候,先各自转成int类型在做运算

    char c1 ='a';
    byte b = 1;
    // 错误:从int转换到short可能会有损失
    short = c1 +b;
    //错误:不兼容的类型,从int转到shaort可能会有损失
    short = (short)(c1) +b;
    

    多种数据类型做混合运算的时候,最终的结果类型是“最大容量”对应的类型

    char c1 ='a';
    byte b = 100;
    int i = 30
    long x = 100
    system.out.println(c1 + b + i + x)//报错  原因计算结果是long类型
    
  • 浮点型数据

    long 8个字节
    float 4个字节
    那个容量大?
    注意:任意一个浮点型都比整数型空间大
    float容量 > long 容量

java中规定,任何一个浮点类型的数据默认被当做double处理
如果想让这个浮点型字面量被当做float类型来处理,那么
请在字面量的后面添加F/f
1.0 那么1.0默认当成double类型处理
1.0F 这才是float类型。(1.0f)
错误:double转成float,可能有精度损失

float f = 3.14

怎么修改上面代码呢?
第一种:

float f = 3.14f;
float f = 3.14F;

第二种:强制类型转换,可能有精度损失,谨慎使用

float f = (float)3.14

在这里插入图片描述

14.运算符
逻辑与& 和 逻辑非 | 要求两边为boolean类型的值
短路与&& 和短路非 || 要求两边为boolean类型的值
区别:逻辑与两边都执行,短路与是左边为false,右边不执行
从效率上来说,短路与&& 比逻辑与& 效率高一些

赋值运算符

byte x =100;
x =  x +1// 会报错   因为x+1 是int类型
x += 1//不会报错  ,得到的结果类型还是byte(扩展运算符)

使用扩展运算符,永远不会改变运算结果类型

+运算符 ,什么时候求和,什么时候进行字符串拼接呢?
当 +运算符两边都是数字类型的时候,求和
当+运算符两边任意一边是“字符串类型”,那么这个+会进行字符串拼接操作,
拼接后的字符串还是字符串
15.Java中i++的结果解释
在这里插入图片描述

16.作业检测
怎么接收用户键盘输入?

java. util.Scanner s = new java.util.Scanner(System.in);
//接收参数
int i = s.nextInt();
//接收字符串
String str = s.next();

在这里插入图片描述
(备注一下,习题记得练习)

17.JVM内存结构
在这里插入图片描述

方法只有在调用的时候才会在栈中分配空间,并且调用时就是压栈。
方法执行结束之后,该方法所需要的空间就会释放,此时发生弹栈操作.
方法区存什么?存代码
栈中存储什么? 方法运行过程中所需要的内存,以及局部变量
在这里插入图片描述

18.数据结构就是存储数据的容器,而不同的容器存在不同的结构。数据结构和java语言实际上没关系,数据结构是一门独立的学科
常见的数据结构:数组,链表,图,二叉树,栈,队列
和数据结构通常在一起出现的是:算法
算法:排序算法,查找算法。。。
栈帧永远指向栈顶的元素

19.方法封装小作业
编写一个方法,输出大于某个正整数n的最小质数
比如:这个正整数n是2
也就是输出:大于2的最小质数,结果就是3

比如:这个正整数n是9
也就是要输出:大于9的最小质数,结果就是11

大于11最小的质数是:13

思路:
首先,系统一定会先给你一个正整数n,然后你基于这个n往后++,
每加1得到的新数n判断一下是否为质数 (p194) 

在这里插入图片描述

20.方法重载的机制?
同一个类中,方法名相同,参数个数、参数类型、参数顺序不同,则发生重载
优点:代码整齐美观,功能相似的可以让方法名相同,更易于以后的代码编写
java语言中,怎么进行方法区分的呢?
首先在java编译器中会通过方法名进行区分,
方法名相同的情况下,根据方法的参数类型进行区分
什么时候使用方法重载?
如果两个功能是相似的,可以考虑将他们方法名一致
不在同一个类中不能叫方法重载
class Hello{public static void m1()}和class Hello1{public static void m1()}
方法的重载和方法的返回值类型无关和修饰列表无关
public static void m1()和public static int m1()不构成重载
void m2()和public static void m2()不构成重载

21.println是方法名,是sun公司的java团队写的,println方法是重载了
有兴趣的可以看看源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值