java学习中的疑难点

1.静态方法不可以使用非静态变量, 但是非静态方法可以使用类中的静态变量
类中的 final 方法可以被子类继承,但是不能被子类修改。
任何继承抽象类的子类必须全部实现抽象类的方法,否则该子类也是抽象类

2.对象的比较==是比较两个对象是否完全一样,如果要比较对象的值是否完全相等的话,要用equals

3.自动装箱一般发生在赋值和调用方法的时候。

4.方法与字符数组的名称都应该满足驼峰风格。

5.与string类不同,Stringbuffer 和Stringbuilder的对象可以多次修改,但是String类的对象不能修改。

6.每次创建一个数组或者一个对象都要new

7.java中包是一类类的集合,也就是把类进行分类。

8.在静态方法中不能使用this,可以夸张的说static方法就是没有this指针的函数。充分体现了在静态方法中不能使用this。与此同时super也不能在静态方法中使用

9.java和c++中引用的差别:java中引用是用来管理和命名对象,但是c++中引用只是给对象起了一个别名而已。c++中一个引用指向的地址不会改变,改变的是地址的内容,然而java中引用指向的地址在变

10.变量实质上是一个储存单元,是内存中的一块区域。

11.指针和引用的区别:指针是一个变量只是这个变量存储的是一个地址,指向内存中的一个存储的单元,而引用跟原来的变量是一个东西,只不过是原变量的一个别名而已。
如 int a=1;int *p=a;这里定义了两个变量,一个是整形变量a,一个是指针变量p,开辟了两个内存空间,p变量的内存空间中存储的是变量a内存空间的地址。而int a=1;int &b=a;这里定义了两个变量a和b,
但是变量b只是a的一个别名,本质上至开辟了一个内存空间,a和b都指向该内存空间。


12.在c++中,指针在初始化后可以改变,即指向不同的内存空间,但是引用一旦确定了就不能改变了,因为引用是一个别名,就像每个人的id一样,是不能改变的

13.正则表达式还没有学,等学完了再回过头学这个。

14.java中public类是整个程序的入口,而main函数是类的入口,所以一个程序的执行首先要找到main函数作为整个程序的入口,String []args方便外面的数据传入到main函数中,即外面的数据是通过String []args传入到main函数中的。

15.当出现异常时,如果在函数中没有检测到相应的catch函数,则会中断当前函数并将异常抛给上一级调用它的函数。避免方法就是在catch子集的最后加上(exception e),因为exception是所有异常的超类。

16.注意异常是一个对象,所谓跑抛出异常也就是抛出一个对象。即throw后面应该加一个new,即throw new xException(),这里的xException()必须是Exception的子类。

17.当出现异常是,如果没有try catch函数的时候,会一及及向上抛,知道遇见相应的try catch函数,如果到最后都没有遇见相应的try catch函数,那么最后让java虚拟机来中断这个程序然后显示在屏幕上。

18.RuntimeException的派生类可以交给程序或者jvm自动处理,但是非RuntimeException的派生类必须由程序员自己手动处理。想要手动抛出一个非runtimeexception的异常的时候,必须先在函数中声明throws后缀。

19.当一个函数调用的抛出异常的函数的时候,如果抛出异常的函数没有进行处理,那么这个函数必须进行处理,第一种处理方法就是在函数中声明一个throws后缀,但是不定义try catch,这样就可以直接交给上一级的函数处理,第二种方法是使用try catch

在这个函数中就将这个异常处理。第一种在异常函数后面的语句都不会执行,第二种整个函数都可以执行。

20.java中next()的有效字符是空格,而nextLine()的结束符是enter。如有下列的一个字符串:
abc hih ihk

ahah haa hh
那么用next()方法第一次取的的字符串是abc 第二次是hih,第三次是ihk
如果用nextline()方法第一次取到的字符串是abc hih ihk,第二次是hai shi  ni.....

21.只要new了一个Scanner对象最后就一定要close()

22.关于A a=new B()的理解:
a是A的一个引用,即分配了一个内存单元里面存放的是新建的B的一个对象的地址,a中的可视化范围是b中继承A的部分,包括B继承A的方法和B中对A 方法的重写。

23.继承链中对象方法的调用的优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。

24.java向上转型时子类的独自方法会丢失。只存在继承或者重写的部分。即A a=new B(),B是A 的子类,那么这里的a对象中只有B继承或者重写A中的部分。

25.涉及到输入输出的问题的时候都要对输入输出流做抛出异常检测

26.int a=System.in.read(buffer)是从键盘输入一串字符,以回车换行符为结束标志,存储在缓冲区buffer中,其中a保存的是实际读入的字节个数,再以整数和字符两种方式输出buffer中的值。

27.凡是带有InputStream的都是字节流,带有reader的都是字符流,字节流是以字节为单位,字符流以unicode为单位

28.getCodeBase()返回的是当前生成的class文件所在的文件夹只用getImage(getCodeBase(),“图片的名字”);

29.多线程的程序是乱序执行的,只有乱序执行的程序才能被设计成多线程,Thread.sleep()的作用是不让当前的线程独占资源,留出一定的时间给其他线程执行,由于多线程的执行是乱序的所以每次执行多线程的结果
都是随机的。

30.Thread.sleep()的作用:比如你在玩贪吃蛇,你总不希望你什么都没看见就挂了吧,所以需要停留一段时间,然后继续下一个线程。

31.jdbc的流程:
1.首先导入包,包含了jdbc所需要的所有资源

2.注册驱动程序,将数据库服务器中的类文件导入到内存当中,这样才能在数据库连接后使用数据库服务器中的资源

3.打开一个连接,产生一个connection对象,这样就建立了一个物理连接,将java与数据库连接起来,通过在java中写入代码可以在数据库中进行增添改删。

4.执行sql操作

5.返回操作结果

6.释放资源

32.在jdbc连接后,首先需要创建一个statemet对象,用该对象来调用sql操作;

33.关于注册驱动程序的理解:jdbc其实就是api接口定义了规范,而任何数据库商制造的数据库都遵循这个接口,注册驱动程序就是相当于告诉电脑连接的数据库是哪种,然后将这个数据库中的类加载进入内存
这样不管使用哪种数据库都可以用一种语法搞定。

34.jdbc的步骤:
1.import java.sql.*;
2.static final String jdbc_driver="xxx";
3.static final String db_url="xxx";(数据库的名称)
4.static final String user="xxx";
5.static final String password="xxx";
6.Class.forName(jdbc_driver)(Class.forName(x)表示加载x中的静态块,也就是在执行这一步的时候,x中的静态方法自动执行,x静态块中的内容是注册驱动程序)
7.Conncetion conn=DriverManager.getConnection(db_url,user,password)建立java和数据库中间的物理连接。
8.statement sta=conn.createStaement(),只有在建立一个statement对象后应用statement对象才能进行sql操作
9.RuseltSet rs=sta.executeQuery(sql)//sta.executeUpdate(sql)执行sql操作
10.rs.close();sta.close();conn.close();释放资源

35.java中使用static final String的原因是fianl将变量表示为常量这样一来就不可以修改,保证了安全性。使用static的原因是static是将后面的变量表示为静态变量这样一来就不用创建对象,可以节省空间和资源
所以在javaee中经常使用static final加变量

36.什么是面向切面编程:面向切面编程就是在运行的时候可以将一段代码动态的切入到指定类的指定方法中,切入的代码叫做切入面,切入到哪些类哪些方法叫做切入点。

38.内存中专门有一个位置存放静态变量和方法,所以运用static可以达到节约资源的目的。

39.java中任何的class都需要加载到虚拟机中才能运行,而Class.forName("x")就是起到将x类加载到虚拟机当中的作用,一旦jvm开始加载x就代表这jvm将会执行x类中静态方法的代码段。

40.javaweb中,.action后缀指的是跳转到action类,比如a href="x.action"指的是跳转到到x类,也就是x.java。那么什么是action类呢,action类是一个独立的工作单元,任何一次用户请求都对应一个action动作,
也就是说action就是用来处理一次用户请求的对象,关于action对的具体详解看https://blog.youkuaiyun.com/bcbobo21cn/article/details/50628762

41.inputstream,fileinputstream,inputstreamreader,bufferedreader的区别:
inputstream是所有字节输入流的超类,可以从流中读取数据,outputstream是字节输出流,可以将数据输出到字节流中
fileinputstream可以从文件系统中的某个文件中获得输入字节,fileoutputstream可以将字节写入到某个文件中
inputstreamreader是字节和字符流转化的桥梁,可以通过指定的编码方式将字节流转化成字符流
bufferedreader是字符流的缓存区,将字符流缓存起来

42.java如何获取jsp中的数据的呢,答案是通过action,structs.xml中规定了表单提交到哪个java文件中,java文件中的属性和属性对应的getter和setter方法就是用来接受用户请求的数据,并将这些数据封装在
action中,也就是后台获取前端的数据是通过action指定的java文件来获取的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值