JAVA 基础知识

Wesley13
• 阅读 490

JAVA 纯面向对象语言, 有平台无关性,一次编译到处运行,编辑器会把java 代码变成中间代码,然后在JVM上解释执行。 拥有很多内置的类库, 提供了对Web 应用开发的支持,具有较好的安全和健壮性。

JAVA 和C++的异同 都是面向对象语言使用了面向对象的思想(封装,继承,多态),面向对象的特性(继承和组合)

  面向对象有以下特点:

  (1)面向对象是一种常见的思想,比较符合人们的思考习惯;

  (2)面向对象可以将复杂的业务逻辑简单化,增强代码复用性;

  (3)面向对象具有抽象、封装、继承、多态等特性。

  面向对象的编程语言主要有:C++、Java、C#等。

类和对象的关系

  类:

  对某类事物的普遍一致性特征、功能的抽象、描述和封装,是构造对象的模版或蓝图,用 Java 编写的代码都会在某些类的内部。类之间主要有:依赖、聚合、继承等关系。

  对象:

  使用 new 关键字或反射技术创建的某个类的实例。同一个类的所有对象,都具有相似的数据(比如人的年龄、性别)和行为(比如人的吃饭、睡觉),但是每个对象都保存着自己独特的状态,对象状态会随着程序的运行而发生改变,需要注意状态的变化必须通过调用方法来改变,这就是封装的基本原则。

封装思想

  核心思想就是“隐藏细节”、“数据安全”:将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者意愿的公有方法来访问这些数据和逻辑,保证了数据的安全和程序的稳定。

 使用 private 修饰符把成员变量设置为私有,防止外部程序直接随意调用或修改成员变量,然后对外提供 public 的 set 和 get 方法按照开发者的意愿

   public 修饰符,具有最大的访问权限,可以访问任何一个在 CLASSPATH 下的类、接口、异常等。

  protected 修饰符,主要作用就是用来保护子类,子类可以访问这些成员变量和方法,其余类不可以。

  default 修饰符,主要是本包的类可以访问。

  private 修饰符,访问权限仅限于本类内部,在实际开发过程中,大多数的成员变量和方法都是使用 private 修饰的。

JAVA 基础知识

继承和类实例化过程

* (2)Java 的继承机制是单继承,即一个类只能有一个直接父类。

* (3)如果子类和父类有同名成员变量和方法,子类可以使用 super 关键字调用父类的成员变量和方法,上述使用方式前提是成员在子类可见。

* (4)在调用子类构造方法时,会隐式的调用父类的构造方法 super()。如果父类没有无参构造方法,为了避免编译错误,需要在子类构造方法中显式的调用父类的含参构造方法。

* (6)当子类需要扩展父类的某个方法时,可以覆盖父类方法,但是子类方法访问权限必须大于或等于父类权限。

类的实例化过程

  (1)JVM 读取指定 classpath 路径下的 class 文件,加载到内存,如果有直接父类,也会加载父类;

  (2)堆内存分配空间;

  (3)执行父类、子类静态代码块;

  (4)对象属性进行默认初始化;

  (5)调用构造方法;

  (6)在构造方法中,先调用父类构造方法初始化父类数据;

  (7)初始化父类数据后,显示初始化,执行子类的构造代码块;

  (8)再进行子类构造方法的特定初始化;

  (9)初始化完毕后,将地址赋值给引用

多态、反射和组件解耦

多态指允许不同类的对象对同一“消息”做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。可以用于消除类型之间的耦合关系,Spring 的核心就是多态和面向接口编程。

 (1)Java 中可以使用父类、接口变量引用子类、实现类对象;

 (2)在这个过程中,会对子类、实现类对象做自动类型提升,其特有功能就无法访问了,如果需要使用,可以做强制类型转换。

1 )JAVA 为解释性语言,经过java 编辑器编译成字节码,然后给JVM 执行,C/C++ 为编译型语言,直接生成二进制代码,所以JAVA 执行速度慢,但是可以跨平台执行。

2)JAVA 纯面向对象,包扩所有的函数变量必须在类中实现,除了基本数据类型。JAVA不存在全局变量和全局变量函数。 C++ 兼有面向对象和面向过程的特点。

3)JAVA 中没有指针的概念

4)JAVA 不支持多重继承,但是可以实现多个接口。

5)C++需要开发人员对于管理内存分配,JAVA提供了垃圾回收器实现自动回收,JAVA没有析构函数,但是提供了finalize()方法。释放无用对象内存。

6)C++ 支持运算符重载,但是JAVA 不支持。    C++支持预处理,JAVA 提供了import 机制。JAVA 不支持结构和联合,所有的内容都封装在类里面。

7)JAVA 具有平台无关性。每种数据类型都分配了固定的长度。C++不同平台分配不同的字节数。

为什么使用 public static void main(String[] args)

程序入口: JVM 运行时回首先找main 方法, 这个类被加载后就可以使用。不需要实例化,可以直接通过类型访问,类名.main() 来访问。 args 为开发人员在命令行下提供了程序交互手段。

1 public static void 没有先后顺序

2 main() 可以定义为 final 也可以用synchronized 修饰 但是返回值必须是void 并且有static 和public 修饰。 不能用abstract(抽象类不能有方法主体)

main 方法前输出Hello world

静态块

java 实例化顺序

JAVA 基础知识

JAVA 作用域

public > protect > default >private

一个 JAVA 文件中可以定义多个类,但是只有一个类可以被public 修饰。并且这个类的名字必须与文件名相同,如果没有public 类,那就无所谓。

构造函数

 1) 与类名相同。不能有返回值

2)可以有多个构造函数,没有的时候,编译成字节码的时候会提供无参构造函数。

3) 构造函数伴随着new 一起使用,由系统调用,实例化的时候自动执行,只调用一次。

4)构造函数不能被继承,但是可以重载。

5) 子类可以super 调用父类的构造函数,父类中没有无参构造函数的时候,子类必须显示调用父类中的构造函数。如果父类提供了无参构造函数的时候,构造起会自动调用父类的构造函数。

JAVA 中有些接口没有方法

因为没有多重继承,所以java 引入了接口,接口是抽象方法定义的集合。接口中成员的修饰符都是public 接口中的常量默认使用 public static final 修饰。

有些接口内部没有任何方法,说明不需要重写任何方法 ,仅仅作为标示接口,用来表面实现他的类属于一个特定的类型。

JAVA 中的clone 方法有什么用

1)复制函数返回的是一个新的对象而不是一个引用,实现clone 的类需要继承cloneable 接口,标示接口。

2)类中重写clone()方法。

3)clone方法中调用super.clone 无论clone 类的继承结构是什么,他都会直接或者间接的调用java.lang.Object 类的clone 方法。

C++中会存在浅复制和深复制,JAVA 也有这样的问题,类中包含一些对象的时候,就需要使用深复制,在对对象调用clone 方法完成复制后,对于非基本类型的属性调用clone 方法完成深复制。

Object 中的clone 被声明为protected的, 保证了类里面才能克隆 对象。

浅复制只考虑了复制的对象,而不会复制它引用的对象。深复制考虑被复制对象所有变量都含有与愿对象相同的的值。

什么是反射机制

放射机制可以是现在运行时对类进行装载。运行时动态的创建类的对象。

获取class 类:

1) class.forName(“类路径”)

2)类名.class

3)实例.class

4.1.12

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
从一个 10 年程序员的角度告诉你:搞懂 Java 面向对象有多容易?
前言:1)java面向对象语言,面向过程围绕过程(解决问题步骤),面向对象围绕实体(名词,特性(属性),行为(动作、方法))。它们设计思想区别在于关心核心不同的。主流都是面向对象的。实际开发,先按面向对象思想进行设计,具体实现时面向过程(人习惯)2)java怎么支持面向对象呢?a.万物皆对象,所有的类都是Object子类b.java中支
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
JAVA面向对象
一、java面向对象的特征?答:java面向对象的特征:封装、继承、多态、抽象。如果问java面向对象的三大特征是什么?那就是封装、继承、多态,但说到面向对象,还有一个很主要的特征就是抽象。1、封装a)铺垫:Java把真实世界中某些具有共同特征的实体抽象成Java中的类,类的实例就是一个对象,而对象和真实世界的实体是一一
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这