J2SE知识点回顾(上)

简介:

part1:001基础知识点


单行注释://


多行注释:/* */

eclipse中多行注释:选定多行代码+快捷键(ctrl+/)


使用eclipse格式化代码:shift+ctrl+F


输出错误信息与调试信息:System.err.println(),System.out.println()


从控制台接收输入字符:Scanner scanner=new Scanner(System.in);//创建输入流扫描器


检查输入位数:line.length()


强制类型转换:long value=100L;byte btValue=(byte)value;将long型强制转为byte型


加密字符串与解密字符串:..=scan.nextLine()//获取用户输入  ..=passworld.toCharArray();//获取字符数组  遍历数组:用for语句


三元运算符判断奇偶:..条件运算String check=(number%2==0))?:条件结果A:条件结果B


左移运算实现乘法运算:左移n位相当于2的n次方


难点:异或运算的用法b=a^b^a  不借助第三变量实现两个变量互换:借助异或运算符"^"实现两变量高效互换:A=A^B;B=B^A;A=A^B;

求奇数运算"N%2==1",如果要考虑到负数问题,任何负数应用这个算法的结果都会等于-1


part2:002流程控制语句

if语句

用if...else或者三目运算符(? : )判断闰年。闰年公式:year%4==0&&year%100!=0||yera%400==0


验证登录信息的合法性 (equals()方法判断两字符串内容是否相同,“==”判断的是字符串对象地址)

if(!username.equals("lee"){  //判断用户名合法性  

System.out.println("用户名非法");

}else if(!password.equals("123"){判断密码合法性

System.out.println("密码错误");

}else{  //通过以上两个条件判断默认通过登录验证

System.out.println("登陆成功");

}


switch语句

switch(表达式){ //该语句只支持对常量的判断,如java的byte/short/int/char类型

case 常量表达式1:语句序列1

[break;]//可选

...

case 常量表达式n:语句序列n

[break;]//可选

default:语句序列n+1

[break;]//可选


判断用户输入月份的季节

对于多个条件采用相同业务处理的情况,可以把多个case分支关联在一起,省略它们之间的break语句,而在最后一个相同的case分支中实现业务处理并执行break语句

比如下面判断冬季的语句

switch(month){

case 12:

case 1:

case 2:

System.out.println("你输入的月份属于冬季");

break;


while语句

多数情况下,遍历数组都是使用for循环语句实现。其实应用while循环语句和自增运算也可实现。

while(条件表达式){ //条件表达式结果为boolean类型,结果只能是true或false

语句序列 //循环体,在条件表达式为true时执行

}


例子:使用while循环计算1+1/2!+1/3!+...1/20!


for语句

例子

使用for循环输出杨辉三角

使用for循环输入99乘法表

遍历数组

for(初始表达式:条件表达式:循环表达式){

循环体

}


part3:003数组操作


获取一维数组的最小值思路:获取用户输入,用trim()方法去除左右空格,对输入内容进行非法检测,用split()方法将输入的字体串分割成字符串数组,并将字符串数组转换到整型数组,最后在遍历数组的同时提取最小值显示到窗体的标签控件中。

参考:http://leexy.blog.51cto.com/4136883/1303209


将二维数组中的行列互换:通过双层for循环遍历数组

参考:http://leexy.blog.51cto.com/4136883/1304048


利用数组抽取幸运观众:需要用到String类的split()方法和Math的random方法

参考:http://leexy.blog.51cto.com/4136883/1303995


利用数组设置JTable表格的列名和列宽,关键代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private  JTable getTable(){
if (table== null ){
table= new  JTable(); //创建表格
String[] columns={ "id" , "姓名" , "性别" }; //定义列名数组
int [] columnWidth={ 10 , 20 , 30 }; //定义宽数组
//创建表格数据模型
DefaultTableModel model= new  DefaultTableModel(columns, 15 );
table.setModel(model); //设置表格数据模型
TableColumnModel columnModel=table.getColumnModel(); //获取列模型
int  count=columnModel.getColumnCount(); //获取列数量
for ( int  i= 0 ;i<count;i++){ //遍历列
TableColumn column=columnModel.getColumn(i); //获取列对象
column.setPreferredWidth(column Width[i]); //以数组元素设置列的宽度
}
}
return  table
}


使用按钮控件数组实现计算器界面 JButton[][] buttons=new JButton[i][j]

通过复选框控件数组实现添加多个复选框控件 JCheckBox[] boxs=new JCheckBox[labels.length]


数组排序:选择排序法、冒泡排序法、快速排序法、直接插入法、sort()方法


反转数组中元素的顺序


part4:004面向对象


自定义类:创建一个自定义的类,提供构造方法和成员方法给它,最后可以在另一个类的main方法中创建自定义类的对象

举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public  class  Animal{  //自定义类
private  String dog; //定义dog
public  Animal(String dog){ //利用构造方法初始化域
this .dog=dog;
}
public  String getDog(){ //成员方法,获得dog
return ;
}}
再创建一个Test类
public  class  Test{
public  static  void  main(String args[]){
Animal animal= new  Animal( "哈皮狗" );
System.out.println(“我家里养了一只"+animal.getDog());
}
}

关于方法调用:温度单位转换例子-在java中使用普通方法需要先创建一个方法所在类的对象,然后通过这个对象调用这个方法。而静态方法可以直接使用类名来调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public  class  Test{
public  double  getFahrenheit( double  celsius){
double  fahrenheit= 1.8 *celsius+ 32 ;
return  fahrenheit;
}
public  static  void  main(String[] args){
System.out.println( "温度℃" );
Scanner in= new  Scanner(System.in);
double  celsius=in.nextDouble();
/*
*静态方法:直接可以用类名调用,不过要确保上面方法是static静态方法
*double fahrenheit=Test.getFahrenheit(celsius);
*/
Test converter= new  Test(); //创建类的对象
double  fahrenheit=converter.getFahrenheit(celsius);
System.out.println( "华氏度\n" +fahrenheit);
}
}


成员变量的默认初始化值:对于基本类型的成员变量,虚拟机会自动为其进行初始化,但对于引用变量的变量,在使用之前需要进行初始化,否则会抛出NullPointerException异常。比如

1
2
3
4
5
6
7
private  byte  b; //声明基本类型变量b
private  String string; //声明引用类型变量string
public  static  void  main(String args[]){
Test init= new  Test(); //创建对象
System.out.println( "比特类型的初始值:" +init.b); //结果:比特类型的初始值:0
System.out.println( "引用类型的初始值" +init.string); //结果:引用类型的初始值null
}

关于java的基本类型与引用类型,可以参考文章:http://ajava.org/article-9-1.html


单例模式的特点在于仅能获得一个对象。为了防止其他用户创建对象,需要将构造方法设置为private的,然后提供一个一个静态方法,该方法返回这个类的对象。例子可以参考:

http://leexy.blog.51cto.com/4136883/1304452


递归算法完成汉诺塔问题求解:为了将N个盘子从A移动到C,需要先将第N个盘子上面的N-1个盘子移动到B上,这样才能将第N个盘子移动到C上。同理,为了将N-1个盘子从B移动到C上,需要将N-2个盘子移动到A上。比如有6个盘子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public  class  Test{
public  static  void  moveDish( int  level, char  from, char  inter, char  to){
if (level== 1 ){   //如果只有一个盘子就退出迭代
System.out.println( "从" +from+ "移动盘子1号到" +to);
} else {   //如果有大于一个盘子就继续迭代
moveDish(level- 1 ,from,to,inter);
System.out.println( "从" +from+ "移动盘子" +level+ "号到" +to);
moveDish(level- 1 ,inter,from,to);
}
}
public  static  void  main(String[] args){
int  nDisks= 6 ;     //设置汉诺塔为6阶
moveDish(nDisks, 'A' , 'B' , 'C' ); //实现移动算法
}
}


利用重载技术编写同名方法(具有相似功能不同参数的方法):当对象在调用方法时,可以根据方法参数的不同来确定执行哪个方法。方法参数的不同包括参数类型不同,参数个数不同和参数顺序不同。但不能通过返回值来区分方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  class  Test{
public  void  info(){   //定义无参方法
System.out.println( "普通方法:小弟弟1岁了" );
}
public  void  info( int  age){   //定义包括整型参数的info()方法
System.out.println( "重载方法:小弟弟" +age+ "岁了" );
}
public  static  void  main(String args[]){
Test a= new  Test();  //测试无参娄info()方法
a.info(); for ( int  i= 1 ;i< 5 ;i++){ //测试有参数info()方法
a.info(i);
}
}
}


统计图书销售量:在类的构造方法中增加计数器来实现该功能

在Book类中定义一个静态的成员变量用来保存实例化的次数,构造方法实现计数器的功能:

1
2
3
4
5
6
7
8
9
10
public  class  Book{
private  static  int  counter= 0 ;
public  Book(String title){
System.out.println( "售出图书" +title);
counter++;
}
public  static  int  getCount(){
return  counter;
}
}

在Test类中创建Book类对象并输出创建对象的个数:

1
2
3
4
5
6
7
8
9
10
public  class  Test {
public  static  void  main(String args[]){
String[] titles={ "A书" , "B书" , "C书" };、 //创建书名数组
for ( int  i= 0 ;i< 10 ;i++){
new  Book(titles[ new  Random().nextInt( 3 )]); //new Random().nextInt(3)用于获得
0 - 2 的整数
}
System.out.println( "总共销售了" +Book.getCount()+ "本图片" );
}
}



使用字符串输出对象:通过重写toString方法来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public  class  Cat{
private  String name;
private  int  age;
private  double  weight;
public  Cat(String name, int  age, double  weight){ //初始化
this .name=name;
this .age=age;
this .weight=weight;
}
public  String toString(){  //重写toString方法
StringBuilder sb= new  StringBuilder();
sb.append( "名字" +name+ "\n" );
sb.append( "年龄" +age+ "\n" );
sb.append( "重量" +weight+ "\n" );
return  sb.toString();
}
}

在main()方法中创建Cat类对象

1
2
3
4
5
6
7
8
9
10
public  class  Test{
public  static  void  main(String args[]){
Cat cat1= new  Cat( "JAVA" , 12 , 21 ); //创建对象并初始化
Cat cat2= new  Cat( "WEB" , 12 , 21 );
Cat cat3= new  Cat( "JAVA" , 12 , 21 );
System.out.println( "猫咪1号" +cat1);
System.out.println( "猫咪2号" +cat2);
System.out.println( "猫咪3号" +cat3);
}
}


本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1349911,如需转载请自行联系原作者

相关文章
|
存储 Java 程序员
Java SE的15道经典面试题
Java SE的15道经典面试题
158 0
|
芯片 索引 内存技术
玩转parameter与localparameter,这篇文章就够了【Verilog高级教程】
玩转parameter与localparameter,这篇文章就够了【Verilog高级教程】
玩转parameter与localparameter,这篇文章就够了【Verilog高级教程】
|
安全 Java 编译器
《JAVA SE》面向对象编程(上篇)
《JAVA SE》面向对象编程(上篇)
150 0
《JAVA SE》面向对象编程(上篇)
|
JSON Java 数据格式
《JAVA SE》面向对象编程(下篇)
《JAVA SE》面向对象编程(下篇)
161 0
《JAVA SE》面向对象编程(下篇)
|
Java 数据处理
【J2SE快速进阶】——IO流简介
IO流是从数据从一处流向另一处的抽象,就像水流从管道的一端流向另一端一样。在程序中,所有的数据都是以流的方式来传输和保存的。 JDK所提供的所有流类位于java.io包中,并且这些类都分别继承自以下四种抽象流类:InputStream、OutputStream、Reader和Writer。
【J2SE快速进阶】——IO流简介
【J2SE快速进阶】——递归算法
递归,百度百科对其定义为:程序调用自身的编程技巧。说白了就是一个函数或者过程在执行时会调用自身。
【J2SE快速进阶】——递归算法
|
小程序 算法 Java
【J2SE快速进阶】——Java多线程机制
学习Java中的线程时,自然而然地联想到之前学过的操作系统中处理器那一块的知识。
【J2SE快速进阶】——Java多线程机制
|
存储 Java
【J2SE快速进阶】——Java内存分析
要在Java中分析内存,我们先来了解一下程序的执行过程:
【J2SE快速进阶】——Java内存分析
|
存储 Java C#
【J2SE快速进阶】——数组(及其内存分析 )
早在学习其他语言如C、VB、C#、C++等时也学习过数组,平时项目中也经常用,但从没仔细再深入了解,这里学习Java又遇到了,重新整理一下。
【J2SE快速进阶】——数组(及其内存分析 )