第一篇:java学习笔记
jdk(java development kit)
有如下公司或组织开发jdk
sun jdk
ibm jdk
bea jrocket
gun jdk
其中ibm的jdk包含的jvm(java virtual machine)运行效率要比sun jdk包含的jvm高出许多。而专门运行在x86平台的jrocket在服务端运行效率也要比sun jdk好很多。但不管怎么说,我们还是需要先把sun jdk掌握好。
1、jdk的下载和安装
jdk又叫做j2se(java2 sdk standard edition),可以从sun的java网站上下载到,http://java.sun.com/j2se/downloads.html,jdk当前最新的版本是j2sdk1.4.2,建议下载该版本的jdk,下载页面在这里:http://java.sun.com/j2se/1.4.2/download.html。
下载好的jdk是一个可执行安装程序,默认安装完毕后会在c:program filesjava目录下安装一套jre(供浏览器来使用),在c:j2sdk1.4.2下安装一套jdk(也包括一套jre)。然后我们需要在环境变量path的最前面增加java的路径c:j2sdk1.4.2bin。这样jdk就安装好了。
2、java documentation
java编程手册,java核心所在3、java 应用服务器
a、tomcat
b、ibm webshpere
c、bea weblogic
d、免费 jboss4、java应用的运行环境
应用服务器(app server)
app server是运行java企业组件的平台,构成了应用软件的主要运行环境。当前主流的app server是bea公司的weblogic server和ibm公司的websphere以及免费的jboss,选择其中一个进行学习就可以了,个人推荐weblogic,因为它的体系结构更加干净,开发和部署更加方便,是java企业软件开发人员首选的开发平台。下面简要介绍几种常用的app server:
1、tomcat
tomcat严格意义上并不是一个真正的app server,它只是一个可以支持运行serlvet/jsp的web容器,不过tomcat也扩展了一些app server的功能,如jndi,数据库连接池,用户事务处理等等。tomcat被非常广泛的应用在中小规模的java web应用中,因此本文做一点下载、安装和配置tomcat的介绍:
tomcat是apache组织下jakarta项目下的一个子项目,它的主网站是:http://jakarta.apache.org/tomcat/,tomcat最新版本是tomcat4.1.27,软件下载的连接是:http://
在启用这两个管理工具之前,先需要手工配置一下管理员用户和口令。用一个文本工具打开catalina_homeconftomcat-users.xml这个文件,加入如下几行:
这样用户“robbin”就具备了超级管理员权限。重新启动tomcat以后,你就可以使用该用户来登陆如上的两个管理工具,通过web方式进行tomcat的配置和管理了。
2、bea weblogic
weblogic可以到bea的网站上免费注册之后下载到最新的weblogic8.1企业版,license可以免费使用1年时间,其实这已经完全足够了。weblogic的下载连接:http://commerce.bea.com/index.jsp,.../edocs.bea.com/。
3、ibm webshpere
websphere同样可以下载到免费的试用版本,到ibm的developerworks网站可以看到websphere试用产品的下载和相关的websphere的资料,developerworks中文网站的连接是:http://。
4、jboss
jboss是免费开源的app server,可以免费的从jboss网站下载:http://,然...n.com/idea.html
四、java应用的运行环境
java的应用可以简单分为以下几个方面:
1、java的桌面应用
桌面应用一般仅仅需要jre的支持就足够了。
2、java web应用
java的web应用至少需要安装jdk和一个web容器(例如tomcat),以及一个多用户数据库,web应用至少分为三层:
browser层:浏览器显示用户页面
web层:运行servlet/jsp
db层:后端数据库,向java程序提供数据访问服务
3、java企业级应用
企业级应用比较复杂,可以扩展到n层,最简单情况会分为4层:
browser层:浏览器显示用户页面
client层:java客户端图形程序(或者嵌入式设备的程序)直接和web层或者ejb层交互
web层:运行servlet/jsp
ejb层:运行ejb,完成业务逻辑运算
db层:后端数据库,向java程序提供数据访问服务
4、java嵌入式应用
java嵌入式应用是一个方兴未艾的领域,从事嵌入式开发,需要从sun下载j2me开发包,j2me包含了嵌入式设备专用虚拟机kvm,和普通的jdk中包含的jvm有所不同。另外还需要到特定的嵌入式厂商那里下载模拟器。
第二篇:java学习笔记(更新)
1.JSP内置对象分类
与Servlet有关的隐含对象
page、config
与Input/Output有关的隐含对象
out、request、response
JSP执行时,提供有关Context的隐含对象
session、application、pageContext 与Error有关的隐含对象
exception
2.get与post区别
get方式:将表单内容经过编码之后,通过URL发送,使用get方式发送时有255个字符的限制(可以在地址栏里看到方式和地点)
post方式:将表单的内容通过http发送,post没有字符长度的限制(在地址栏里看不到表单提交的信息
3.forward与sendredirect区别 服务器端跳转
使用
使用服务器端跳转,可以通过
response.sendRedirect(“uri”);地址栏改变的跳转
所有代码执行完毕之后再跳转
使用response时,不能保存request属性
使用客户端跳转,可以通过重写URL的方式来传递参数 4.JSP内置对象session
session对象用来存储有关用户会话的所有信息直到它的生命周期超时或被人为释放掉为止。
设置session session.setAttribute(“name”, “admin”);根据名称去获取session中存放对象的值
String name =(String)session.getAttribute(“name”);根据名称去删除session中存放对象的值 session.removeAttribute(“name”);用户注销功能的实现 session.invalidate();5.JDBC API JDBC API可做三件事:与数据库建立连接、执行SQL语句、处理结果 DriverManager :依据数据库的不同,管理JDBC驱动 Connection :负责连接数据库并担任传送数据的任务
Statement(PreparedStatement):由 Connection 产生、负责执行SQL语句 ResultSet:负责保存Statement执行后所产生的查询结果
JDBC应用开始->装入JDBC驱动程序
->创建与数据库的连接->创建语句对象——Statement或PreparedStatement->利用语句对象执行SQL语句,得到结果
->处理结果 JDBC应用结束 6.MVC设计模式
模型(Model)JavaBean 代表应用程序状态和业务逻辑
视图(View)JSP 提供可交互的客户界面,向客户显示模型数据
控制器(Controller)Servlet 根据客户的请求来操纵模型,并把结果经由视图展现给客户
Model I设计模式
JSP+JavaBean(View + Model)
Model II设计模式
JSP+JavaBean+servlet(View + Model+controller)
Model I和Model II的对比
Model I缺少控制器(Controller),不易维护和扩展 Model I开发速度快,适用于开发中、小型项目
Model II 代码的重用性 有利于开发的分工
各司其职、互不干涉 7.EL表达式
由于jsp标准动作的局限,一般是操作JavaBean的属性
JavaBean的属性只能为基本数据类型不能进行逻辑操作,而el却可以精确的访问存储对象,Bean属性的简略记法,空值取代错误消息 优点
代替复杂代码,省去条件判断 访问Bean的属性 Bean属性的简略记法
以输出MVC中的内容,代码简单 8.EL隐式对象
pageScope:范围和JSP的page相同,只限于当前页面 requestScope:范围和JSP的page相同,范围限于一次请求 sessionScope:范围和JSP的session相同,范围为一次会话
applicationScope:从服务器一开始执行服务,到服务器关闭为止 9.jsp中动态include和静态的include 区别
动态INCLUDE总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态include伪码实现,不会检查所含文件的变化,适用于包含静态页面 10.Servlet和JSP的关系
Servlet是JSP的早期版本,在JSP中,更加注重页面的表现,而在Servlet中则更注重业务逻辑的实现。
同时,JSP只能处理浏览器的请求,而Servlet则可以处理一个客户端的应用程序请求。因此,Servlet加强了Web服务器的功能。10.Servlet的生命周期
Servlet是服务器端运行的。Servlet是javax.servlet包中HttpServlet类的子类,由服务器完成该子类的创建和初始化。
Servlet的生命周期主要由3个过程组成。
1、init()方法:服务器初始化Servlet。
2、service()方法:初始化完毕,Servlet对象调用该方法相应客户的请求。
3、destroy()方法:调用该方法消灭Servlet对象。其中,init()方法只在Servlet第一次被请求加载的时候被调用一次,当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service方法相应客户的请求。11.JSP 6种基本动作
jsp:include:在页面被请求的时候引入一个文件。jsp:useBean:寻找或者实例化一个JavaBean。jsp:setProperty:设置JavaBean的属性。jsp:getProperty:输出某个JavaBean的属性。jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
12.Request对象的主要方法:
setAttribute(String name,Object):设置名字为name的request的参数值 getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组 getCharacterEncoding():返回请求中的字符编码方式 getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例 getInputStream():返回请求的输入流,用于获得请求中的数据 getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值 getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值 getProtocol():获取客户端向服务器端传送数据所依据的协议名称 getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址 getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径 getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性 13.会话跟踪技术
Session 隐藏表单域 URL重写 Cookie使用 14.cookie的使用
cookie是一段字符串,由HTTP支持,在客户端可以永久保存.写入(硬盘).每次请求,响应中都会为cookie留有空间.Cookie cookie=new Cookie(“name”,cookie);//必须指定cookie的键与值,且必须为字符串.response.addcookie(cookie);
cookie.setMaxAge(3600);//以秒为单位.读取客户端发送过来的cookie,返回值类型为: cookie数组
request.getCookies();循环读取键与值.小常识:(1).一个网站最多向一个客户端写20个cookie.(2).一个客户端最多接收300个cookie.
第三篇:java学习笔记(部分)
作业:
a.登陆验证,SSJ 通过MySQL进行数据校验,如果成功转向到main.jsp 失败则返回。
b.登陆用户信息存放session
Maven 搭建环境的步骤: 1).新建Maven Project
错误解决 :是因为没有web.xml,再webapp中新建一个即可
引入spring环境 修改pom中的依赖 spring-context
引入spring MVC模块
spring webmvc
配置文件:springmvc-servlet.xml
加载 spring 上下文
Web.xmlContextLoaderListener struts-servlet.xml
配置springmvc前端控制器 Web.xml
配置扫描包:
错误:The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path通过引入servlet-api 模块
配置jetty插件
80
运行程序
测试访问:http://localhost/list
至此,springmvc的环境就搭建成功了
完成作业
因为要通过数据库验证,则需要引入jdbc/druid组件 spring-jdbc/druid/mysql connector j
配置数据源:
配置JDBCTemplete组件
一/深入了解spring MVC
@RequestMappging注解
可以指定处理的请求是什么类型的
@RequestMapping注解可以放在类上面,标识一个父路径相当于struts2 @NameSpace
正式的写法:
二/SSJ集成
第四篇:java学习笔记总结
java 学习笔记总结
1.Java是什么呢?
Java不仅是一门语言,而且是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码和一个提供安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。
2.JDK 和 JRE 是什么?
JDK:全称是 Java Development Kit,这是我们编写java程序的开发人员需要的。我们首先要下载和安装JDK,然后设置环境变量,具体操作可以加我扣:七零五叁零六久久久
JRE:全称是 Java Runtime Environment,它包含虚拟机但不包含编译器,这是运行java程序的用户需要的环境
3.来个Hello World看看吧?
照例先创建一个类HelloWorld.java,源代码如下: /** * @author 老孙
*/ public class HelloWorld {
public static void main(String[] args){
System.out.println(“Hello World”);
} } Java类名一般是以大写字母开头的名词,多个单词的话每个单词首字母都应该大写。Java源代码以.java作为扩展名,而且文件名必须和文件里的公共类同名。
4.怎么用命令行运行java程序?
比如上面我们编写了一个类叫做HelloWorld.java,首先打开一个终端;
然后进入到HelloWorld.java类所在的目录; 输入命令 javac HelloWorld.java。javac是一个java编译器,注意该命令需要的是文件名,也就是要带着.java后缀。 输入命令 java HelloWorld。java启动Java虚拟机,该命令只需要类名,不需要带着.java或者.class等后缀。
5.Java代码怎么加注释?
// 单行注释 和 /*{……}*/ 长篇注释,这两种方式很多语言都一样,没什么特别强调的。
另外还有一种注释可以方便的生成java doc文档,以/** 开头,以*/结束。
6.Java的几种基本数据类型是?
4种整型:byte(1字节),short(2字节),int(4字节),long(4字节)。(PS:Java没有无符号整型) 2种浮点型:float(4字节),double(8字节) 字符类型:char 布尔类型:boolean
在Java种每个类型占用几个字节是固定的,与运行java的机器无关,这点与C#不同,这也是Java具有可移植性的关键点。
浮点类型一般double比float常用,而且浮点型存在四舍五入的情况,如果用在对精确度要求高的商业场景,就得使用java.math.BigDecimal类型了。我们写个demo看看:
/** * @author 老孙
*/ public class DemoDouble { public static void main(String[] args){
double d1=0.05;
double d2=0.01;
double result=d1+d2;
System.out.println(result);//结果:0.***005
BigDecimal bd1=new BigDecimal(“0.05”);
BigDecimal bd2=new BigDecimal(Double.valueOf(“0.01”));
double result2=bd1.add(bd2).doubleValue();
System.out.println(result2);//结果:0.06
} }
7.Java怎么定义常量?
使用关键字final定义常量,之前C#用的是const关键字,这一点不同要注意一下。命名规则上,常量一般使用大写字母,中间用下划线分隔。例如: private static final Integer MAX_SIZE=100;
8.String字符串怎么截取子串?
Substring(beginIndex,endIndex):返回子字符串,从beginIndex到endIndex-1。String s=“你好,今天是2018年1月5日,圣诞快乐!” String date = s.substring(6,17);System.out.println(date);// 输出:2018年1月5日
注意:该方法的返回结果不包含最后一个位置的字符。如果有问题就问我:七零五叁零六久久久 9.Java字符串怎么拼接?
①最简单的拼接方式就是使用+符号。
②String.join(char,str1,str2….strN):静态方法拼接字符串,用字符char分隔,将字符串进行拼接。//拼接
String s2=String.join(“、”,“JAVA核心技术”,“JAVA编程思想”,“SpringBoot”);System.out.println(s2);//输出:JAVA核心技术、JAVA编程思想、SpringBoot
③当有大量字符串拼接操作的时候使用StringBuilder,这跟C#基本相同。
10.怎么判断两个Java字符串是否相等?
equals方法判断两个字符串内容是否相等。而==判断两个字符串是否指向内存中同一位置。//比较
String s3=“abc”;String s4=“abc”;String s5=new String(“abc”);String s6=new String(“abc”);System.out.println(s3==s4);//true System.out.println(s3.equals(s4));//true System.out.println(s5==s6);//false System.out.println(s5.equals(s6));//true 这个demo中s3==s4返回true,因为在Java中字符串是不可修改的,编译器有一些优化机制让字符串共享,所以s3和s4实际上指向了内存中同一位置 11.Java数组有哪些常用操作?
①foreach循环数组
//foreach循环数组 int[] arr={1,3,5,7,9};for(int item:arr){ System.out.println(item);} ②打印数组元素
Arrays.toString(a):返回字符串,数组元素包含在方括号中,以逗号分隔。Arrays.deepToString(arr):用来打印多维数组。//打印数组
System.out.println(Arrays.toString(arr));//输出 [1, 3, 5, 7, 9] int[][] arrM={{1,2,3},{11,12,13},{21,22,23}};System.out.println(Arrays.deepToString(arrM));//[[1, 2, 3], [11, 12, 13], [21, 22, 23]] ③拷贝数组元素
静态方法Arrays.copyOf(originalArray,length):第一个参数是要拷贝的源数组,第二个元素是新数组的长度,如果第二个大于原数组长度,则自动填充默认值。//拷贝数组元素
int[] arr2=Arrays.copyOf(arr,arr.length);System.out.println(Arrays.toString(arr2));//输出 [1, 3, 5, 7, 9] int[] arr3=Arrays.copyOf(arr,arr.length/2);System.out.println(Arrays.toString(arr3));//输出 [1, 3] int[] arr4=Arrays.copyOf(arr,arr.length*2);System.out.println(Arrays.toString(arr4));//输出 [1, 3, 5, 7, 9, 0, 0, 0, 0, 0] ④排序
静态方法Arrays.sort()方法采用优化后的快速排序算法对数组元素进行排序。//排序
int[] arr6={12,4,53,78,21,943,3};Arrays.sort(arr6);System.out.println(Arrays.toString(arr6));//输出 [3, 4, 12, 21, 53, 78, 943]
⑤查找
静态方法Arrays.binarySearch(arr, valueToFind):二分查找,第一个参数是要查找的数组,第二个参数是要查找的目标元素。该方法有个前提是数组必须是有序的。//查找
int index=Arrays.binarySearch(arr6,12);//输出 2 System.out.println(index);
⑥填充数组元素
静态方法Arrays.fill(arr,item):将数组arr每个元素都填充为item.//填充数组元素
String[] arr7=new String[5];Arrays.fill(arr7,“*”);System.out.println(Arrays.toString(arr7));//[*, *, *, *, *]
⑦比较数组
注意要使用Arrays.equals(arr1,arr2)比较数组,如果两个数组元素全部相同,则返回true。//比较数组元素
String[] arr8={“*”,“*”,“*”,“*”,“*”,};System.out.println(arr7.equals(arr8));//false System.out.println(Arrays.equals(arr7,arr8));//true
12.日期对象LocalDate ①获取当前日期时间 //当前日期
LocalDate today=LocalDate.now();
System.out.println(today);//2017-12-26
//当前时间
LocalTime currentTime=LocalTime.now();
System.out.println(currentTime);//12:23:09.054
//当前日期时间
LocalDateTime dateTime=LocalDateTime.now();
System.out.println(dateTime);//2017-12-26T12:23:09.054
②构造某个指定日期
//构造指定日期
LocalDate newYear=LocalDate.of(2018,1,1);System.out.println(newYear);//2018-01-01
③解析日期字符串,如果不合法会抛出异常。
//解析日期字符串
LocalDate date1=LocalDate.parse(“2018-12-31”);System.out.println(date1);//2018-12-31//LocalDate.parse(“2018-11-31”);//抛出异常
④获取若干天后的某个日期 //15天后
LocalDate date15=today.plusDays(15);System.out.println(date15);//2018-01-10
⑤获取年份、月份、日期
//获取年、月、日
System.out.println(date15.getYear());//2018 System.out.println(date15.getMonth());//JANUARY System.out.println(date15.getMonthValue());//1 System.out.println(date15.getDayOfMonth());//10 System.out.println(date15.getDayOfWeek());//WEDNESDAY System.out.println(date15.getDayOfYear());//10 注意:使用Date对象的getYear()方法,不能获取当前的年份
System.out.println(new Date().getYear());//117,不是我们想要的结果2018 我们看一下该方法的源码,计算的是当前年份和1900年的差值
public int getYear(){ return normalize().getYear()-1900;}
大家在学习的过程中遇到任何的问题都可以咨询我(QQ:705306999,奔跑de蜗牛)
也可以加入到我们的免费学习交流群: 579016988(职坐标java编程交流群2)玩微信的朋友也可以加老孙的个人微信公众号:微信右上角点击加号--添加朋友--公众号--搜索:我是老孙(如下图),也会不定期发送技术文章,娱乐八卦,吃喝玩乐,房产头条,心灵鸡汤等信息!
加图片说明文字
注意:添加时请注明微博
移除点击此处添如果大家想看老孙的直播学习,可以加入咱们的免费公开课进行学习!腾讯课程地址:https://ke.qq.com/course/92963#tuin=2a0a2177
有的人会这样说:“我只是在业余时间打盹而已,业余时间干吗把自己弄得那么紧张?”
爱因斯坦就曾提出:“人的差异在于业余时间。”
一位在哈佛任教的朋友说,只要知道一个青年怎样度过他的业余时间,就能预言出这个青年的前程怎样。记得点赞和转发哦!
片说明文字
移除点击此处添加图
第五篇:Java笔记总结
1、Java是一种可以编译 跨平台、面向对象的高级计算机语言。
2、Java语言的特点:简单、安全、跨平台、面向对象、支持多线程。
3、Java的三个技术平台分别是 JavaSE、JavaEE、JavaME。
4、Java程序的运行环境简称为 JDK。
5、编译Java程序需要使用 javac 命令。
6、javac.exe和java.exe这两个可执行程序存放在JDK安装目录的bin目录下。
7、PATH环境变量用来存储Java的编译和运行工具所在的路径;CLASSPATH环境变量 则用来保存Java虚拟机要运行的“.calss”文件。
8、.class文件在 java.exe 文件启动的JVM中运行。
9、JRE与JDK之间的区别:
a)JRE(Java Runtime Environment)提供java程序运行所需要的基本条件(如JVM)和许多基础类。
b)JDK(Java Development Kit)是Java程序开发工具包——包含编译工具、解释工具、打包工具等开发工具。
10、JVM——Java虚拟机,相当于一个虚拟的操作系统,负责运行javac.exe生成的 字节码(二进制)文件。java.exe执行”.class”,就是java.exe启动JVM运行”.class”文件。
11、标识符命名规则:
a)包名所有字母一律小写。
b)类名和接口名每个单词首字母大写。
c)常量名所有字母都大写,单词之间用下划线分开。
d)变量名和方法名的第一个单词小写,之后的每个单词首字母大写。
12、强制类型转换:
a)格式:目标类型 变量名 =(目标类型)值
b)int类型转换成byte类型 很容易造成 精度丢失。因为int类型变量是32位,byte类型只有8位,所以在转换过程中会丢失int类型的高3位字节。
c)在用”双字符“型运算符(+=、-=之类的)运算时,强制类型会自动完成,不用程序显示的声明。
13、三元运算符:判断条件?表达式1:表达式2;——若条件成立,执行表达式1,否则执行表达式2。
14、跳转语句:
a)break:
i.用于switch语句,终止某case并跳出switch结构。ii.用于循环语句,跳出循环语句,执行后面的程序。
b)continue——只用于循环语句中:终止本次循环,执行下一次循环。
15、方法重载:
a)2个条件:方法名相同、参数个数或参数类型不同。b)与返回值类型无关。
16、数组:
a)定义数组:
i.类型[ ] 数组名 = new 类型[ 数组长度 ] //这种定义方式只指定了长度,元素的初值由系统自动赋0。(动态初始化)
ii.类型[ ] 数组名 = new 类型[ ]{元素,元素,......} iii.类型[ ] 数组名 = {元素,元素,......} //这2种称为 静态初始化。
17、冒泡排序:
a)若有n个元素,则进行n-1轮排序(n-1次外循环)
b)第1轮排序,元素之间进行n-1次比较;第2轮排序进行n-2次排序......最后1轮只进行1次比较。c)外循环条件:i < arr.length d)内循环条件:j < arr.length1
18、二维数组:
a)定义方式1:类型[ ][ ] 变量名 = new 类型[ 几行 ][ 几列 ];b)可理解为数组的 数组——例arr[0][1]-->数组名arr[0],第二个元素[1];c)二维数组的 长度 由”[ 几行 ]“确定!
d)定义方式2:类型[ ][ ] 变量名 = new 类型[ 几行 ][ ];//行数确定,列数不确定——每行可以随便 赋值。
e)定义方式3:类型[ ][ ] 变量名 = { { ,...,...,...},{ },{ },......} //这种行数、列数都不确定。大括号 内的每个 大括号 代表 一行 的元素,每行有多少个元素 取决于 内大括号 中元素的个数。
19、面向对象的特点:封装性、继承性、多态性。
20、在创建变量后,JVM运行程序时,会自动初始化变量。引用型变量 为 null。
21、垃圾对象——没有变量引用的对象。
22、类的封装:将类中的属性 私有化。外界访问私有属性时 只能通过该属性的 getxxx()方法。
a)//择Generate getter and setter--> 自动生成
set和get方法。
23、构造方法:实例化对象。
a)可以用 带参数的构造方法 在实例化对象时就 给私有属性 赋值。b)好的程序员 应该为每个类 写一个 无参构造方法。c)定义构造方法的条件:
i.方法名与类名相同。ii.没有返回值的 声明。
iii.方法中 不能有return 返回值。
24、this关键字
a)this指代 该类实例化的 对象。所以可以用 this.xx的方式调用 成员。b)在成员方法中使用this关键字,避免参数名与属性名相同。c)用this关键字调用 构造方法
i.只能在构造方法中 用this调用其他构造方法; ii.此时this语句必须位于第1行,并且只能出现一次 iii.不能在一个类的两个构造方法中互相调用。
25、static关键字
a)静态变量:
i.用static修饰的变量 ii.静态变量被所有实例共享
iii.可以使用“类名.变量名”的形式来访问。iv.只能修饰 成员变量 b)静态方法
i.希望在不创建对象的情况下也能条用 类中的 某个方法,那就用static关键字休息这个方法 ii.静态方法 只能访问 静态成员!
//因为非静态成员 必须先创建对象才能访问,而静态方法在被调用的时候可以 不创建对象——那么就没有非静态成员可供访用。
c)静态代码块
i.当类被加载时,静态代码会执行一次。而类只会被加载一次,所以静态代码块只会被执行一次。
ii.通常会用静态代码块对类的成员变量进行初始化。d)单例模式
i.private static 类名 INSTANCE = new 类名();量——自己创建一个对象。private 类名(){};
//私有的 构造方法,只能内部访问
}
//私有成员变public static 类名 getInstance(){ return INSTANCE;//定义静态方法,返回自己的实例对象。ii.第二种单例模式创建方法。
1.Private 类名(){} 调用。
2.public static fianl 类名 INSTANCE = new 类名();的不能被修改的 静态成员对象。
26、内部类——定义在类里面的 类
a)成员内部类
i.相当于成员方法,可以访问外部类的所有成员;
ii.因为成员内部类相当于 成员方法,所以想要创建内部类对象时,必须得用外部类的对象 去创建内部类对象:
1.外部类名.内部类名 变量名 = new 外部类名().new 内部类名();b)静态内部类
i.用static修饰的成员内部类,也相当于静态方法。只能访问外部类的静态成员。
ii.因为静态,所以在创建内部类对象时,可以不用先创建外部类对象:
1.外部类名.内部类名 变量名 = new 外部类名.内部类名();iii.静态内部类中 可以定义静态成员,非静态内部类则不可。c)方法内部类
i.在方法中定义的类,只能在当前方法中被使用。
27、当一个对象被当成垃圾从内存中释放时,它的 finalize()方法会被自动调用。
//公有
//私有的 构造方法,只能在类的内部被
28、继承
a)继承关键字:extends。b)格式:Class A extends B{} c)单继承——一个类只能有一个直接父类。
29、重写父类方法
a)条件:方法名、参数、返回值类型 3个都相同。
b)重写之后,子类调用被重写的方法时,就是调用自己写的方法。c)重写应用:
i.应用对象 是父类的 公有方法。重载 应用的对象是 类本身的 方法。ii.重写父类 不适合子类的 方法 iii.实现接口。
30、super关键字
a)调用父类成员变量和成员方法:
i.super.成员变量;ii.super.成员方法(参数1,参数2,...);b)调用父类的构造方法
i.super(参数1,参数2,...);ii.必须位于子类的构造方法的第一行,且只能出现一次。
iii.在实例化子类时,系统会在 子类的构造方法中 调用
父类的构造方法——如果子类的构造方法中 没有调用 父类的构造方法,系统会自动调用父类的无参构造方法。所以 每个类的 无参构造方法 一定不要漏了!子类也可以显示的调用 父类的有参或无参构造法方法。c)解决 重写了父类方法之后,不能调用父类方法的问题。
31、final关键字
a)final修饰的类 不能被继承 b)final修饰的方法 不能被子类重写
c)final修饰的变量 是常量,不能被修改,且必须在定义时 为变量赋值。
32、抽象类
a)关键字 abstract b)抽象方法:abstract void shout(){};——没有方法体。
c)包含抽象方法的类必须声明为 abstract类:abstract class Animal{} d)抽象类可以 不包含任何抽象方法,只需用abstract修饰。e)抽象方法不能直接实例化,只能让 子类实例化。
33、接口
a)定义关键字:interface——interface Animal{} b)接口中的方法 被默认修饰为:public abstract——抽象方法。c)接口中的变量 被默认修饰为 :public static final —— 全局常量
i.所以变量最好用
全大写
表示。
d)因为方法都是抽象的,所以必须定义一个类 来实现(implements)接口——Class A implements B{} e)接口之间可以继承——interface C extends B{} f)一个类可以实现多个接口,接口直接间用逗号隔开。g)一个类可以在继承一个类的同时,实现其它的接口。
h)如果一个类去实现接口的话,那么这个类必须实现接口中所有的方法。
34、多态
a)方法上的多态
i.类内部方法的重载 ii.子类对父类方法的重写 b)对象上的多态性
i.假设父类:A;子类B B b = new B();ii.对象的自动向上转型:A a = b;//子类对象,变成了父类对象。
1.虽然a指向A的对象,但是如果B重写了A的方法,那a调用的还是B中的方法。
iii.对象的强制向下转型
1.若 A a = new A();2.B b =(B)a;
//父类对象变成了 子类对象。3.这时对象b调用的是 子类的重写的方法。
4.注意:对象发生强制向下转型之前,必须保证已经发生了向上转型,否则会出异常。
35、异常
a)异常类分为:编译时异常、运行时异常 b)异常处理机制: i.try...catch...finally 1.try代码包含可能发生异常的Java语句,catch块中包含针对一场进行处理的代码。
2.当发生异常时,系统将异常信息封装成一个异常对象传递给catch代码块。所以catch需要定义1个对应的异常类 变量。3.finally代码块包含,无论发生什么异常都要执行的代码。常用于关闭系统资源。
ii.throws关键字声明抛出异常,调用者对其处理。这种方法能通过编译,但是发生异常后就会终止运行。
c)自定义异常
i.首先定义 一个继承Exception异常的 异常类;异常类中 编写一个无参构造方法(调用父类无参构造方法),再编写一个 带String参数的构造方法(也调用父类的带Stirng参数的构造方法)。ii.再定义一个 测试类,定义要调用的方法,并在此方法后面用 throws关键字 声明抛出自定义异常;再在 方法体 内判断什么时候 用throw new 自定义异常(“要打印的信息”)。//声明自定义异常对象。
iii.最后在 测试类的main 方法中,iv.try{...}
catch(...){ System.out.printlan(e.getMessage)}
finally{...}
36、线程的创建: a)继承Thread类,并重写run()方法。然后new Thread().start;开启线程。
b)实现Runnable接口,重写run()方法。然后new Thread(new myRunnable).start开启线程。
37、两种实现多线程的比较——实现Runnable接口的方法更好
a)可以让多个线程共享资源。——售票系统需要。b)避免单继承。38、36、