菜鸟教程(Java)笔记——Java教程

编程知识 行业动态 更新时间:2024-06-13 00:22:55

说明

此文章为阅读Java菜鸟教程的笔记,内容基本都是摘自自菜鸟教程,截取部分暂时没记住的,再补充部分个人感想。
Java菜鸟教程网址如下: https://www.runoob/java/java-tutorial.html

一:Java简介

  1. Java分为三个体系:
    JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)
    JavaEE(J2EE) (Java 2 Platform,Enterprise Edition,java平台企业版)
    JavaME(J2ME) (Java 2 Platform Micro Edition,java平台微型版)。
  2. Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
  3. 只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
    extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承
    JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements
    继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了
    术语话来说:
    extends 继承类;implements 实现接口。
    类和接口是不同的:类里是有程序实现的;而接口无程序实现,只可以预定义方法。
  4. Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中,所以Java语言是解释型的。

二:Java基础语法

编写 Java 程序时,应注意以下几点:

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
    源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的 Java 程序由 public static void main(String []args) 方法开始执行。在一个Java代码文件中,如果有public类,那只能有一个public类型的类,而且这个类名要为文件的文件名;如果没有public类,那就对文件名与类名无要求。

Java 源程序与编译型运行区别

三:Java基本数据类型

八种基本类型

引用类型

  • 在Java中,引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
  • 对象、数组都是引用数据类型。
  • 所有引用类型的默认值都是null。

四:Java 变量类型

Java变量类型

  • 类变量:独立于方法之外的变量,用 static 修饰。
    类变量也称为静态变量。静态变量在第一次被访问时创建,在程序结束时销毁。
    无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
    静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
    静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。

  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。
    实例变量在对象创建的时候创建,在对象被销毁的时候销毁。
    实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;

  • 局部变量:类的方法中的变量。
    局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁。
    局部变量是在栈上分配的。
    局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

public class Variable{
    static int allClicks=0;    // 类变量
    String str="hello world";  // 实例变量
    public void method(){
        int i =0;  // 局部变量
    }
}

五:Java 修饰符

这一章节需要多次反复查看。
特别是protected,是最难理解的Java类成员访问权限修饰词,详细介绍可以查看 Java protected 关键字详解
除了protected之外,还有abstract、synchronized、transient、volatile我都不熟悉,等工作中遇到了再进一步学习可能效果更好。

六:Java 运算符

自增自减运算符

  • 前缀自增自减法(++a,–a): 先进行自增或者自减运算,再进行表达式运算。
  • 后缀自增自减法(a++,a–): 先进行表达式运算,再进行自增或者自减运算 。

位运算符

Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。这几个位运算符我用的很少,总是记不清。
位运算符作用在所有的位上,并且按位运算。下表列出了位运算符的基本运算,假设整数变量A的值为60和变量B的值为13:

可以看到 <<x,就是乘以2的x次方。>>x就是除以2的x次方。

赋值运算符


红框内的赋值运算符我用的很少。

instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。
instanceof运算符使用格式如下:
( Object reference variable ) instanceof (class/interface type)
如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。
如果被比较的对象兼容于右侧类型,该运算符仍然返回true。

class Vehicle {} 
public class Car extends Vehicle {
   public static void main(String[] args){
   		String name = "James";
		boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真
    	Vehicle a = new Car();
        boolean result =  a instanceof Car;//返回true
        System.out.println( result);
   }
}

七:基本数据类型的装箱和拆箱

一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte、int、long、double 等。然而,在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java 语言为每一个内置数据类型提供了对应的包装类。

这个部分容易出错,我第一次参加面试的时候就被问过

	Integer a = 1;
	Integer b = 1;
	Integer c = 150;
	Integer d = 150;
	System.out.println(a==b); //true
	System.out.println(c==d); //false
	//当int的值在[-128,127]之间的时候,valueOf会返回指向已经存在的对象的引用;否则创建一个新的Integer对象.

除此之外这里一般还是涉及到 == 和 equals的区别。

这部分的内容搜索 java的装箱拆箱就会有很多帖子。
这里放两个:
https://wwwblogs/wang-yaz/p/8516151.html
https://blog.csdn/qecode/article/details/83040059

八:String 、StringBuffer、StringBuilder

String类是不可改变的

字符串实际上就是一个 char 数组,并且内部就是封装了一个 char 数组。
并且这里 char 数组是被 final 修饰的,IDK源码如下:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

注意:

String s = "Google";
System.out.println("s = " + s);
s = "Runoob";
System.out.println("s = " + s);

输出结果为:

Google
Runoob

从结果上看是改变了,但为什么说String对象是不可变的呢?
原因在于实例中的 s 只是一个 String 对象的引用,并不是对象本身,当执行 s = “Runoob”; 创建了一个新的对象 “Runoob”,而原来的 “Google” 还存在于内存中。

String、StringBuffer 和 StringBuilder 的区别

  • String:
    字符串常量,字符串长度不可变。Java中String 是immutable(不可变)的。用于存放字符的数组被声明为final 的,因此只能赋值一次,不可再更改。
  • StringBuffer:
    字符串变量(Synchronized,即线程安全)。如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
  • StringBuilder:
    字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。
  • 基本原则:
    如果要操作少量的数据用 String ;
    单线程操作大量数据用StringBuilder ;
    多线程操作大量数据,用StringBuffer。

九:Java 日期时间

这部分碰见了再翻看,用多了就记下来了。
https://www.runoob/java/java-date-time.html
有以下几个部分:

  • 获取当前日期时间
  • 日期比较
  • 使用 SimpleDateFormat 格式化日期
  • 日期和时间的格式化编码
  • 使用printf格式化日期
  • 解析字符串为时间
  • Java 休眠(sleep)
  • 测量时间
  • Calendar类

十:Java 正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

  • 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配");
  • 可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

  • 灵活性、逻辑性和功能性非常的强;
  • 可以迅速地用极简单的方式达到字符串的复杂控制。
  • 对于刚接触的人来说,比较晦涩难懂。

注意:正则表达式写好后,没有错对之分,返回结果只是true和false
这部分无法一遍记住,以后工作中碰到了再翻看,多用几次才好记。
https://www.runoob/java/java-regular-expressions.html
正则表达式在线测试工具

十一:Java 异常处理

工作中遇到了再进一步学习,边实践边学习。
https://www.runoob/java/java-exceptions.html

更多推荐

菜鸟教程(Java)笔记——Java教程

本文发布于:2023-04-03 13:28:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/c9e6b9bf7de12af0fdba65c13b8cab16.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:教程   菜鸟   笔记   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!