Java基础1

1.JRE和JVM的区别

  • JRE(Java Runtime Environment,Java运行环境)包括Java虚拟机(JVM)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机只需要安装JRE即可。
  • JDK(Java Development Kit,Java开发包)是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就不需要单独安装JRE了。其中的开发工具包括:编译工具(javac.exe),打包工具(jar.exe)等

简而言之:使用JDK开发完成java程序,交给JRE去运行

2.第一个java程序,HelloWorld.java

class HelloWorld{
    public static void main(String[] args) {
        System.out.println("HelloWorld");
    }
}

1.文件名最好必须要与类名相同
2.java的入口是执行main函数

执行

javac HelloWorld.java # 编译,生成class字节码文件
java HelloWorld      # 执行class文件

3.数据类型

  • 基本数据类型
    数值型:byte(1),short(2),int(4),long(8),float(4),double(8)
    字符型:char(2)
    布尔型:boolean
  • 引用数据类型
    类class
    接口interface
    数组[]

整数默认:int,小数默认:double

long i = 10000000000 // 10000000000默认是int,所以不能赋给long
long i = 10000000000L

float j = 12.345 //12.245默认是double,赋值给float会损失精度
float j = 12.345F

4.变量作用域

  • 变量定义在哪个大括号内,它就在这个大括号内有效
  • 在同一个大括号内不能同时定义同名的变量

类型转换

  • 隐式转换
byte a = 10
int b = 20
int c = a+b // a会提升为int类型
  • 强制转换
byte i = 10000;  //错误,损失精度
byte i = (byte)(10000); //强制转换
System.out.println(i); // 16

注意:

float f1 = (float)12.245 //f1其实是通过一个double类型转换过来的
float f1 = 12.245F // f2本身就是一个float
  1. 在定义Long或者Float类型变量的时候,要加L或者F
    整数默认是int类型,浮点数默认是double
    byte,short在定义的时候,他们接收的其实是int类型的值,这个是自己做了一个数据检测的,如果不再它们的范围内,就报错

float和double的存储结构

易错知识

s+=1等价于 s = (s的数据类型)(s+1)

例如:

short s = 10
s = s + 2; // 报错
s+=2; // 正确

键盘录入程序

import java.util.Scanner;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("请输入数字");
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        System.out.println("你输入的数字是"+x);
    }
}

Java中的内存分配

Java程序为了提高程序的效率,就对数据进行了不同空间的分配,具体划分为五个内存划分

  • 栈:存储局部变量,由操作系统回收
  • 堆:存储new出来的东西,有java虚拟机回收
  • 方法区
  • 本地方法区,和系统相关
  • 寄存器:给CPU使用

局部变量:在方法定义中或者方法声明上的变量
堆内存的特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
C:使用完毕后就变成垃圾,但是并没有立即回收。会在垃圾回收器空闲的时候回收
栈内存的数据用完就释放

成员变量和局部变量的区别

class Student{
    int age; // 成员变量
    public static void study(){
        int num = 10; //局部变量
    }
}

成员变量和局部变量的区别?

  • 在类中的位置不同
    • 成员变量:类中方法外
    • 局部变量:方法内部或者方法声明上
  • 在内存中的位置不同
    • 成员变量:堆内存
    • 局部变量:栈内存
  • 生命周期不同
    • 成员变量:随着对象的存在而存在,随着对象的消失而消失
    • 局部变量:随着方法的调用而存在,随着方法的调用而完毕而消失
  • 初始化不同
    • 成员变量有默认的初始值
    • 局部变量没有默认的初始值,必须先定义,赋值,才能使用

匿名对象

没有名字的对象
new Student
匿名对象的应用场景

  • 调用方法,只调用一次
    new Student().study(); // 调用完成之后会被回收,没有指针指向(记住GC中的标记清除)
  • 匿名对象可以作为参数传递

构造方法

类的组成

1.成员变量
2.构造方法
3.成员方法

类的初始化过程

Student s = new Student();在内存中做了哪些事情?

  • 加载Student.class文件进内存
  • 在栈内存为s开辟空间
  • 在堆内存为学生对象开辟空间
  • 对学生对象的成员变量进行默认初始化
  • 对学生对象的成员变量进行显示初始化
  • 通过构造方法对学生对象的成员变量赋值
  • 学生对象初始化完毕,把对象地址赋给s变量

静态成员的注意点(难点)

  • 所属不同
    • 静态变量属于类,所以也称为类变量
    • 成员变量属于对象,所以也称为实例变量(对象变量)
  • 内存中位置不同
    • 静态变量存储于方法区的静态区
    • 成员变量存储于堆内存
  • 内存出现时间不同
    • 静态变量随着类的加载而加载,随着类的消失而消失
    • 成员变量随着对象的创建而存在,随着对象的消失而消失
  • 调用不同
    • 静态变量可以通过类名调用,也可以通过对象调用
    • 成员变量只能通过对象名调用

创建工具类的小技巧

我们提供一个工具类,让其他类去调用该类的方法,但是我们不希望别人去实例化对象来调用类方法,可以对构造方法private,从而阻止类的实例化。

代码块

局部代码块,局部位置,限定变量的生命周期

public class HelloWorld {
    public static void main(String[] args) {
        {
            int x = 3;// 局部代码块
        }
        System.out.println(x); //无法访问

    }
}

构造代码块,在类中成员位置,用{}括起来的代码。执行过程:每次调用构造方法执行前,都会执行构造代码块。作用:可以把多个构造方法中共同代码放到一起。

class Student{
    {
        System.out.println("第一个构造代码块");
    }
    public Student(){ System.out.println("我是构造方法"); }
    {
        System.out.println("第二个构造代码块");
    }
}

public class HelloWorld {
    public static void main(String[] args) {
        Student s = new Student();
    }
}

输出:

第一个构造代码块
第二个构造代码块
我是构造方法

静态代码块,在类中成员位置,用{}括起来,用static修饰。作用:一般是对类的初始化。

class Student{
    static {
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是构造代码块");
    }
    public Student(){ System.out.println("我是构造方法"); }
}

public class HelloWorld {
    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println("===========");
        Student s2 = new Student();
    }
}

输出:

我是静态代码块
我是构造代码块
我是构造方法
===========
我是构造代码块
我是构造方法

注意:各个代码块的执行顺序:静态代码块-》构造代码块-》构造方法;其中静态代码块只执行一次(只要一加载到内存时就执行),构造代码块在每次创建对象的时候都会执行。

class HelloWorld{
    static {
        System.out.println("我是静态代码块");
    }
    {
        System.out.println("我是构造代码块");
    }
    public HelloWorld(){ System.out.println("我是构造方法"); }
    public static void main(String[] args) {
        System.out.println("我是主函数");
    }
}

输出

我是静态代码块
我是主函数
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,538评论 0 6
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,788评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,650评论 0 11
  • 人生最终的价值在于觉醒和思考的能力,而不只在于生存。 -- 亚里士多德 写下这个题目的时候,我明白自己在写一个多么...
    楚浛阅读 941评论 1 12
  • 冬天是个小妹妹 喜欢溜冰,喜欢开玩笑。 过田野 给田野留上白色的东西 飞过大地教会了大...
    时间就是金钱_6abe阅读 543评论 0 0