每个Java初学者都应该搞懂的六个问题

合集下载

java基础知识有哪些_Java程序员必须掌握知识整理

java基础知识有哪些_Java程序员必须掌握知识整理

java基础知识有哪些_Java程序员必须掌握知识整理Java作为一门受欢迎的语言之一,在IT行业中的前景也是特别好的,java的薪资也让人心动,越来越多的人想从事java相关行业。

下面一起来看看我为大家整理的java基础学问,欢迎阅读,仅供参考。

Java核心基础学问1、先了解什么是Java的四个方面初学者先弄清这些Java的基本概念也是必不行少的,死记硬背确定是不行的,重在理解,理解它们之间的区分与联系,分别有哪些应用。

想想这些代码中用到了哪些学问点。

不要一味地照着书本敲代码。

而不去理解。

1.Java编程语言,即语法。

2.Java文件格式,即各种文件夹、文件的后缀。

3.Java虚拟机(JVM),即处理*.class文件的解释器。

4.Java应用程序接口(Java API)。

2、把握静态方法和属性静态方法和属性用于描述某一类对象群体的特征,而不是单个对象的特征。

Java中大量应用了静态方法和属性,这是一个通常的技巧。

但是这种技巧在许多语言中不被频繁地使用。

理解静态方法和属性对于理解类与对象的关系是非常有关心的,在大量的Java规范中,静态方法和属性被频繁使用。

因此学习者应当理解静态方法和属性。

Java在方法和属性的调用上是全都的,区分只表现在声明的时候,这和c++是不同的。

3、初学者还需明白JA V A的三个技术平台的关系Java分为三个体系,分别为Java SE(J2SE,Java2 Platform Standard Edition,标准版)。

JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版)。

Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。

要知道java是分两部分的:一个是编译,一个是运行。

javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序。

对指定扩展名的.java文件进行编译。

Java基础知识点归纳

Java基础知识点归纳

Java基础知识点归纳Java基础学问点归纳对于刚刚接触Java的人,java基础学问技术点繁多,那么yjbys我为大家汇总最全java学问点如下,仅供大家参考学习!1. JVM相关(包括了各个版本的特性)对于刚刚接触Java的人来说,JVM相关的学问不愿定需要理解很深,对此里面的概念有一些简洁的了解即可。

不过对于一个有着3年以上Java阅历的资深开发者来说,不会JVM几乎是不行接受的。

JVM作为java运行的基础,很难信任对于JVM一点都不了解的人可以把java 语言吃得很透。

我在面试有超过3年Java阅历的开发者的时候,JVM几乎就是一个必问的问题了。

当然JVM不是唯一确定技术能力好坏的面试问题,但是可以佐证java开发能力的高低。

在JVM这个大类中,我认为需要把握的学问有:JVM内存模型和结构GC原理,性能调优调优:Thread Dump,分析内存结构class 二进制字节码结构,class loader 体系,class加载过程,实例创建过程方法执行过程:Java各个大版本更新提供的新特性(需要简洁了解)2. Java的运行(基础必备)这条可能出看很简洁,java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行java程序,底层IDE又是如何执行java程序呢?很多人并不了解。

这个学问点是最最基本的java开发者需要把握的,初学java,第一个确定是教你如何在指令行中执行java程序,但是很多人一旦把java学完了,IDE用上了,就把这个都忘了。

为什么强调要知道这个呢,知道了java最纯粹的启动方式之后,你才能在启动出问题的时候,去分析当时启动的名目多少,执行命名如何,参数如何,是否有缺失等。

这样有利于你真正开发中去解决那些奇诧异怪的可能和环境相关的问题。

在这里需要把握的学问有:javac 编译java文件为class 文件java 指令的使用,带package的java类如何在指令行中启动java程序涉及到的各个路径(classpath,java。

JAVA学习中常见问题解读

JAVA学习中常见问题解读

一、JAVA编程规范定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。

(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)Package 的命名:Package 的名字应该都是由一个小写单词组成。

Class 的命名:Class 的名字必须由大写字母开头而其他字母都小写的单词组成.Class 变量的命名:变量的名字必须用一个小写字母开头。

后面的单词用大写字母开头。

Static Final 变量的命名:Static Final 变量的名字应该都大写,并且指出完整含义。

参数的命名参数的名字必须和变量的命名规范一致。

数组的命名数组应该总是用下面的方式来命名:byte[] buffer;而不是:byte buffer[];方法的参数:使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:SetCounter(int size){this.size = size;}Java 文件样式所有的Java(*.java) 文件都必须遵守如下的样式规则:版权信息版权信息必须在java 文件的开头,比如:/*** Copyright ? 2000 Shanghai XXX Co. Ltd.* All right reserved.*/其他不需要出现在javadoc 的信息也可以包含在这里。

Package/Importspackage 行要在import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。

如果import 行中包含了同一个包中的不同子目录,则应该用* 来处理。

package .stats;import java.io.*;import java.util.Observable;import hotlava.util.Application;这里java.io.* 使用来代替InputStream and OutputStream 的。

每个Java初学者都应该搞懂的六个问题

每个Java初学者都应该搞懂的六个问题

每个Java初学者都应该搞懂的六个问题每个Java初学者都应该搞懂的六个问题对于这个系列里的问题,每个学Java的人都应该搞懂。

当然,如果只是学Java玩玩就无所谓了。

如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。

内容均来自于CSDN的经典老贴。

问题一:我声明了什么!String s = "Hello world!";许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。

这样模糊的回答通常是概念不清的根源。

如果要准确的回答,一半的人大概会回答错误。

这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。

这就是真正发生的事情。

我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。

所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。

问题二:"=="和equals方法究竟有什么区别?==操作符专门用来比较变量的值是否相等。

比较好理解的一点是:int a=10;int b=10;则a==b将是true。

但不好理解的地方是:String a=new String("foo");String b=new String("foo");则a==b将返回false。

根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。

a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。

Java新手必要6个知识点,天津java培训

Java新手必要6个知识点,天津java培训

Java新手必要6个知识点,天津java培训经常会有同学问到有关java编程的知识点,哪些是要点啊?哪些要牢牢掌握啊?诚筑说小编帮你们整理了一下和大家一起分享。

JVM相关JVM作为java运行的基础来说,掌握透析JVM是佐证java开发能力水平的一个点。

在有关JVM的知识里面我们需要掌握:内存模型和机构GC的原理,性能调优,二进制字节码结构,class加载的过程、实例创建的总过程以及java各大版本的新特性也是需要了解和掌握学习的。

JAVA运行这是作为一个java开发人员来讲ZUIZUIZUI基本的知识内容。

要如何在命令行中执行java程序,还有编译,命令使用,在命令中启动java以及涉及到的各个路径。

数据类型相信大家学习java也都知道其中的基本类型和对象类型需要着重掌握,也可以深入了解一些JDK是如何自动转换。

基本类型一般包含:int,long,double等,对应的对象类型有Integer 等类型到基本类型的转换对象的创建这个也是一个合格的java需要掌握的如何创建对象。

一般包含四个方式:new运算的方式创建对象,通过反射的方式创建对象,通过对象反序列化的方式来创建,通过clone的方式创建。

访问控制Java中提供三个显示的和一个默认的访问控制符,分别代表了4个不同的访问级别,由大到小。

Private(当前类访问权限)、default(包访问权限)、protected(子类访问权限)、public (公共访问权限)面向对象这是java里比较核心的一个,对于任何一位java工作者都要掌握熟练。

主要的知识点包含面向对象三大特性:封装、继承、多态,其中各自的概念和使用继承。

以上是诚筑说小编整理的一些知识要点,希望能够对大家有所帮助。

有不同的意见也欢迎大家一起沟通交流。

java面试题基础篇

java面试题基础篇

java面试题基础篇当涉及Java 面试的基础篇时,以下是一些常见的问题和主题,供你进行复习和准备:1. Java 基础:-什么是Java 编程语言?Java 的特点是什么?- Java 的数据类型有哪些?基本数据类型和引用数据类型有什么区别?-解释一下Java 的封装、继承和多态。

-什么是类和对象?如何创建类和对象?-什么是构造方法?它有什么作用?-什么是方法重载和方法重写?-解释一下静态变量和实例变量的区别。

-什么是接口和抽象类?它们之间的区别是什么?2. 面向对象设计:-什么是SOLID 原则?分别解释每个原则的含义。

-什么是设计模式?举例说明几个常用的设计模式。

-什么是单例模式?如何实现线程安全的单例模式?-什么是工厂模式和抽象工厂模式?3. 异常处理:-什么是异常?Java 中的异常处理机制是什么?-解释一下try-catch-finally 块的工作原理。

-什么是运行时异常和受检异常?4. 集合框架:-介绍Java 的集合框架。

ArrayList 和LinkedList 的区别是什么?-什么是Map 接口?HashMap 和TreeMap 的区别是什么?-什么是迭代器?如何使用迭代器遍历集合?5. 线程与并发:-什么是线程?如何创建和启动一个线程?-解释一下同步和异步,阻塞和非阻塞。

-什么是线程安全?如何避免线程安全问题?-什么是死锁?如何避免死锁?6. IO 操作:-什么是输入流和输出流?-解释一下字节流和字符流的区别。

-什么是序列化和反序列化?7. Java 虚拟机(JVM):-什么是JVM?JVM 的主要组成部分是什么?-什么是垃圾回收?Java 中的垃圾回收机制是什么?8. 基础算法和数据结构:-解释一下栈和队列。

-什么是哈希表(HashTable)?如何解决哈希冲突?-什么是递归?递归的应用和注意事项是什么?这只是一些常见的Java 面试基础题目,你可以根据实际情况进行深入的学习和准备。

Java初学者该学习什么-Java初学者应该怎么学

Java初学者该学习什么-Java初学者应该怎么学

Java初学者该学习什么-Java初学者应该怎么学Java初学者必须要学习的基础知识有这些:Java语法、Java集合和数据结构、例外状况、面向对象〔编程〕(OOP)、输入/输出流。

如果想具体了解Java初学者该学习什么,那无妨接着往下看吧!1、Java语法。

从Java的第一个单词开始,它帮助您编写第一个“Hello World〞程序编写到循环和条件运算符。

在这里,你要学习基本类型,如何使用它们,什么是类。

2、Java集合和数据结构。

起初,掌握一些数据结构会给初学者带来困难,但后来,它们会让您灵活地为您的问题选择正确的结构。

所以,熟练掌握〔java〕数据结构是一种很强的技能。

这部分的知识和技能在java培训中也有广泛的介绍,所以要认真学习。

3、例外状况。

异常(或异常事件)是程序执行过程中出现的异常状况。

在Java中,Exception是一个可以使用的类,这种机制大大简化了程序中的bug逮住。

4、面向对象编程(OOP)。

Java中的一切都与对象有关,因此,理解OOP是非常必要的。

只必须将有关OOP的学习教程与大量Java任务结合起来即可。

5、输入/输出流。

很多初学者在了解I/O流之前会先使用它们。

第一个Java程序,又名“Hello World〞,包涵“System.out.println〞。

然而,理解这些“in〞和“out〞是在第一步之后。

Java培训中有很多有关这方面的学习内容,甚至还有更多的实训项目。

2Java初学者应该怎么学1、勤动手很多人学习喜爱看视频看书,却忽略了重要的一点,那就是敲代码,学习编程,不敲代码怎么可能学得会呢?所以要多敲多练,哪怕是你看起来简单的不行的部分,也要敲出来才算,编程本就是一个既枯燥又有趣的过程,重要的是要在这个过程中发现有趣的地方,2、看源码有些人建议初学者不要去碰源码,觉得会打击自信心,但是我却认为应该适当的去接触源代码,一些好的开源框架以及JDK的源码都可以,这会让我们在理解知识点的同时更深层次的去理解这些东西,在这个过程中我们的进步虽然很慢,但是关于我们的将来发展却有着极大的帮助。

java入门需要学习哪些知识

java入门需要学习哪些知识

java入门需要学习哪些知识要学习Java入门,你需要掌握以下几个关键知识点:1. 编程基础知识:了解编程概念、变量、数据类型、运算符、条件和循环语句等基本概念。

此外,学习如何设计和构建简单的算法。

2. 面向对象编程(OOP):掌握对象、类、封装、继承和多态等面向对象的基本概念。

理解OOP的优势,学会如何使用Java中的封装性、继承性和多态性。

3. Java语法:学习Java的基本语法规则,包括语句、方法、异常处理、输入输出和数组等。

还需掌握如何使用Java的关键字和运算符。

4. 数据结构和算法:熟悉常见的数据结构,如数组、链表、栈、队列和树等。

掌握常用的算法,如排序、搜索和图算法等。

了解这些基础的数据结构和算法对于开发高效的Java程序至关重要。

5. 网络编程:学习如何使用Java编写网络应用程序。

了解基本的网络通信协议,如TCP/IP和HTTP等。

学习如何使用Java提供的Socket类库进行网络通信。

6. 多线程:理解多线程编程的概念和原理。

学习如何使用Java的多线程库创建和管理线程。

了解如何避免线程安全问题和死锁。

7. 数据库连接:学习如何使用Java与数据库进行连接和操作。

了解基本的数据库概念,如表、字段和SQL语句等。

掌握Java连接数据库的方法,如使用JDBC(Java Database Connectivity)API。

8. 开发工具和环境:了解常用的Java开发工具,如Eclipse、IntelliJ IDEA等。

学习如何配置和使用这些开发工具。

此外,需要安装Java开发环境(JDK)并了解如何设置环境变量。

9. 学习资源:选择合适的学习资源,如教程、书籍、在线课程和编程网站等。

通过参与实际项目或编写小型程序来锻炼自己的编程能力。

10. 持续学习和实践:Java是一门广泛应用的编程语言,因此需要不断学习新知识和关注最新的技术趋势。

积极参与编程社区,与他人交流和分享经验,提升自己的编程水平。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

每个Java初学者都应该搞懂的六个问题对于这个系列里的问题,每个学Java的人都应该搞懂。

当然,如果只是学Java玩玩就无所谓了。

如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。

内容均来自于CSDN的经典老贴。

问题一:我声明了什么!String s = "Hello world!";许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。

这样模糊的回答通常是概念不清的根源。

如果要准确的回答,一半的人大概会回答错误。

这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。

这就是真正发生的事情。

我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。

所以,如果在刚才那句语句后面,如果再运行一句:String string = s;我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。

问题二:"=="和equals方法究竟有什么区别?==操作符专门用来比较变量的值是否相等。

比较好理解的一点是:int a=10;int b=10;则a==b将是true。

但不好理解的地方是:String a=new String("foo");String b=new String("foo");则a==b将返回false。

根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。

a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。

a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。

诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。

对象内容的比较,正是equals方法做的事。

看一下Object对象的equals方法是如何实现的:boolean equals(Object o){return this==o;}Object对象默认使用了==操作符。

所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。

同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。

因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。

看一下一个极端的类:Class Monster{private String content;...boolean equals(Object another){ return true;}}覆盖了equals方法。

这个实现会导致无论Monster实例内容如何,它们之间的比较永远返回true。

所以当你是用equals方法判断对象的内容是否相等,请不要想当然。

因为可能你认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。

如果你需要使用equals方法,或者使用任何基于散列码的集合(HashSet,HashMap,HashTable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。

问题三:String到底变了没有?没有。

因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。

请看下列代码:String s = "Hello";s = s + " world!";s所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论。

我们来看看发生了什么事情。

在这段代码中,s原先指向一个String 对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。

这时,s不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。

通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。

因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。

这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。

并且,这两种类的对象转换十分容易。

同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。

例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做:public class Demo {private String s;...public Demo {s = "Initial Value";}...}而非s = new String("Initial Value");后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。

也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。

上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。

而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。

至于为什么要把String类设计成不可变类,是它的用途决定的。

其实不只String,很多Java标准类库中的类都是不可变的。

在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。

不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。

当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。

所以Java标准类库还提供了一个可变版本,即StringBuffer。

问题四:final关键字到底修饰了什么?final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。

引用本身的不变:final StringBuffer a=new StringBuffer("immutable");final StringBuffer b=new StringBuffer("not immutable");a=b;//编译期错误引用指向的对象不变:final StringBuffer a=new StringBuffer("immutable");a.append(" broken!"); //编译通过可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。

至于它所指向的对象的变化,final是不负责的。

这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。

理解final问题有很重要的含义。

许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。

在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。

一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。

其实那是徒劳的。

问题五:到底要怎么样初始化!本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。

1. 类的属性,或者叫值域2. 方法里的局部变量3. 方法的参数对于第一种变量,Java虚拟机会自动进行初始化。

如果给出了初始值,则初始化为该初始值。

如果没有给出,则把它初始化为该类型变量的默认初始值。

int类型变量默认初始值为0float类型变量默认初始值为0.0fdouble类型变量默认初始值为0.0boolean类型变量默认初始值为falsechar类型变量默认初始值为0(ASCII码)long类型变量默认初始值为0所有对象引用类型变量默认初始值为null,即不指向任何对象。

注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。

对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。

instance 属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。

这个问题会在以后的系列中进行详细讨论。

对于第二种变量,必须明确地进行初始化。

如果再没有初始化之前就试图使用它,编译器会抗议。

如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。

也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。

但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。

对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。

如果在catch 或finally里也有,则可以通过编译。

总之,要保证局部变量在使用之前一定被初始化了。

所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧!其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。

只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。

问题六:instanceof是什么东东?instanceof是Java的一个二元操作符,和==,>,<是同一类东东。

由于它是由字母组成的,所以也是Java的保留关键字。

相关文档
最新文档