第四章java基础知识

4.1基本概念

一、java优点

1.面向对象(封装、继承、多态)

2.可移植性。平台无关,一次编译,到处运行。Windows,Linux,macos等。java为解释性语言,编译器把java变成中间代码然后在JVM上解释执行。

3.提供内置类库,简化开发eg:支持多线程、网络通信、提供垃圾回收器等

4.提供对web应用开发的支持。eg:applet、servlet、jsp等可开发web;socket、RMI可开发分布式

5.安全性+健壮性。eg:在网络环境中应用,提供防止恶意代码攻击的安全机制(数组边界检测和bytecode校验等);强类型机制、垃圾回收器、异常处理和安全检查机制。

6.去除了c++语言中难以理解的东西,比如头文件、指针、结构、单元、运算符重载、虚拟基础类、多重继承等

二、java与c++/c的异同点

java

C++

·解释性语言

·运行过程:

源代码-java编译器->字节码-JVM解释执行

·执行速度比C++慢,能跨平台执行

·编译性语言

·运行过程:

源代码-编译、链接->可执行的二进制代码

·不能跨平台执行

纯面向对象。

1.所有代码必须在类中实现,除基本数据类型外所有类型都是类

2.不存在全局变量或全局函数

【java中的方法属于类中的成员x

——静态方法属于类成员,用static修饰;动态方法属于实例成员】

兼具面向对象和面向过程的特点

可定义全局变量和全局函数

没有指针概念,防止了C语言中操作指针可能引起的系统问题,而使程序更安全

不支持多重继承,但是引入了接口概念,可以同时实现多个接口。接口具有多态性,可利用接口实现与C++语言中多重继承类似的目的

提供了垃圾回收器来实现垃圾的自动回收,不需要程序显式管理内存分配。

无析构函数,引入了finalize()方法,当垃圾回收器要释放无用对象的内存使,首先调用该对象的finalize()方法。因此开发人员无需关心内存释放问题

需开发人员管理对内存的分配(申请、释放等)释放:析构函数

不支持运算符重载

支持

没有预处理器(头文件、宏定义等)

提供的import机制类似于C++的预处理器

支持预处理

不支持默认函数参数

支持

不支持goto语句(goto是保留关键字)

支持

不支持自动强制类型转换,必须由开发人员显式地进行

支持,会导致程序的不安全

不包含结构和联合,所有内容封装在类里面

结构和联合所有成员均为公有,会导致安全性问题

平台无关,对每种数据类型都分配固定长度

同一数据类型在不同的平台上会分配不同的字节数

提供对注释文档的内建支持,源码文件可包含自己的文档。通过一个单独的程序可提取文档信息,并重新格式化成html

包含完成特定任务的标准库,缩短开发周期

eg:JDBC库访问数据库,用于实现分布式对象的RMI等

依靠非标准的。厂商提供的库

三、public static void main(String[] args)

程序入口方法,JVM运行程序时首先查找main()方法

·public:权限修饰符,表明任何类或对象均可访问

·static表明main是静态方法,方法中的代码存储在静态存储区,类被加载后不需要实例化对象即可直接通过类名.main()访问。能找到则执行,否则报错

·void:无返回值

·main是用来给JVM识别的特殊方法名

每个类中都可以定义main()方法,但是只有与文件名相同的且被public修饰的类中的main()方法才能作为整个程序的入口方法

·String[] args 字符串数组参数args为开发人员在命令行状态下与程序交互提供了手段

·javac编译:javac

参考:https://blog.csdn.net/cunjiu9486/article/details/109077115

用命令行编译java程序并执行

javac D:/t1.java

java D:/t1

1

2

3

4

5

6

7

public class t1 {

public static void main(String[] args) {// args由JVM赋值,谁调用方法谁赋值

//public与static没有先后顺序关系,反过来也合理

//也可以把main定义为final:public static final void main(String[] args)

//synchronized也可以修饰main:public static synchronized void main(String[] args)

//不能用abstract。必须返回值为void。且有关键字static和public修饰

System.out.println("sss1");

System.out.println(args.length);// args初值为0

for (int i = 0; i < args.length; i++) {

System.out.println(args[i]);// 遍历数组,输出数组元素

}

}

}

若赋值:

由此可知,在运行java程序时,类名 后面紧跟一个或多个字符串(多个字符串以空格隔开),JVM就会把这些字符串一次赋值给args数组元素。第一个参数对应第一个数组元素,第二个参数对应第二个数组元素。若参数本身包含空格,则应""起来,否则空格会被当成分隔符。

四、如何在main()方法执行之前输出helloworld?

A:

1:public class Test{

static{

System.out.println("hello world");//静态块不管顺序如何都会在main方法前执行

}

public static void main(String[] args){

System.out.println("hello my world");

}

}

2:public class Test{

public static void main(String[] args){//main方法是最先加载的,但不意味着是第一个被执行//的模块。在java语言中,静态块在类被加载时,就会被调用

System.out.println("hello my world");

static{

System.out.println("hello world");//执行结果与1相同

}

}

}

五、java程序初始化顺序

实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有所有类成员完成初始化之后,才会调用对象所在类的构造函数创建对象。

三个原则~

1.静态>非静态。静态只初始化一次,非静态可能会初始化多次

2.父类>子类

  3.按照成员变量的定义顺序进行

【未完待续】

java宝典笔记(一)的更多相关文章

  1. GitHub标星125k!阿里技术官用3个月总结出的24万字Java面试笔记

    最近收到一位粉丝的回馈! 这位粉丝已经成功入职阿里了小编很是羡慕啊! 今天就把这份30w字Java面试笔记给大家分享出来,说来也巧这份资料也是由一位阿里技术官整理出来的这算不算是"搬起石头砸 ...

  2. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  3. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  4. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  5. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  6. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  7. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  8. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  9. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

随机推荐

  1. Selenium2+python自动化65-js定位几种方法总结

    Selenium2+python自动化65-js定位几种方法总结   前言 本篇总结了几种js常用的定位元素方法,并用js点击按钮,对input输入框输入文本 一.以下总结了5种js定位的方法 除了i ...

  2. 华为联运游戏审核驳回:在未安装或需更新HMS Core的手机上,提示安装,点击取消后,游戏卡屏(集成的6.1.0.301版本游戏SDK)

    问题描述 更新游戏SDK到6.1.0.301版本之后,游戏包被审核驳回:在未安装或需更新华为移动服务版本(HMS Core)的手机上,提示安装华为移动服务(HMS Core),点击取消,游戏卡屏.修改 ...

  3. 学习axios必知必会(2)~axios基本使用、使用axios前必知细节、axios和实例对象区别、拦截器、取消请求

    一.axios的基本使用: ✿ 使用axios前必知细节: 1.axios 函数对象(可以作为axios(config)函数使用去发送请求,也可以作为对象调用方法axios.request(confi ...

  4. 使用 Kubeadm+Containerd 部署一个 Kubernetes 集群

    本文独立博客阅读地址:https://ryan4yin.space/posts/kubernetes-deployemnt-using-kubeadm/ 本文由个人笔记 ryan4yin/knowle ...

  5. 在 Prim 算法中使用 pb_ds 堆优化

    在 Prim 算法中使用 pb_ds 堆优化 Prim 算法用于求最小生成树(Minimum Spanning Tree,简称 MST),其本质是一种贪心的加点法.对于一个各点相互连通的无向图而言,P ...

  6. 操作系统的发展史(并发与并行)<异步与同步>《进程与程序》[非堵塞与堵塞]

    目录 一:一:手工操作 -- 穿孔卡片 1.简介 二:手工操作方式两个特点: 三:批处理 -- 磁带存储 1.联机批处理系统 2.脱机批处理系统 3.多道程序系统 4.多道批处理系统 四:总结发展史 ...

  7. python 如何获取当前系统的时间

    1.导入包 import datetime 2.获取当前的时间 curr_time = datetime.datetime.now() # 2019-07-06 14:55:56.873893 < ...

  8. PyTorch 1.4 中文文档校对活动正式启动 | ApacheCN

    一如既往,PyTorch 1.4 中文文档校对活动启动了! 认领须知 请您勇敢地去翻译和改进翻译.虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错--在大部分情况下,我们的 ...

  9. JavaScript闭包的那些事

    JavaScript闭包 1.函数在JavaScript中的地位 在介绍闭包之前,可以先聊聊函数在JavaScript中的地位,因为闭包的存在是与函数息息相关的. JavaScript之所以可以称之为 ...

  10. 【JS】函数提升变量提升以及函数声明和函数表达式的区别

    今天看js的变量提升问题,里面提到了函数提升.然后发现自己之前一直把函数声明和函数表达式弄错,导致函数提升出错 一.变量提升 console.log(a) var a=100 //undefined ...