*.jar:java类的压缩包
*.class:java源码编译后的文件
*.java:源代码
Workspace:Java平台作为项目管理的文件区间
误区:1.把所有项目代码都放在一个project中,这样代码不容易管理,当开发人员多时,无法拆分项目。 2.不要把不相关的project放在同一个workspace。
Java虚拟机(JVM):跨平台
垃圾收集机制:系统自动执行,不能强制执行
.java:源代码文件
bin文件夹:.java的文件编译后的结果放置在bin中
*.class:半编译代码(字节码)
.c–>>.exe 编译后的内容是二进制(机器码)----依赖于你的操作系统和CPU指令集
Java编译器:针对Java虚拟机产生class文件,因此独立于平台
Java解释器:负责将Java虚拟机的代码在特定的平台上运行
Java程序和JavaScript都是解释运行的语言
c程序是编译运行程序,运行速度更块,但容易内存泄漏
public static void main(String[] args) {
}
public:作用范围,在main函数中,只能使用public,不能使用private/protected/默认
void:表示这个函数无需返回任何信息
String[] :表示字符型数组
args:参数的名字,可以修改
static:关键字,静态的 。静态变量、静态方法(表示这个方法与所在的class无关)
算术运算符:+,-,,/,%,++,–
关系运算符:>,<,>=,<=,==,!=
布尔运算符:!,&&,||
赋值运算符:=,+=,-=,=,/=
字符串连接运算符:+
位运算符:&,|,~,^,<<,>>
条件运算符:表达式1?表达式2:表达式3
int sum=0;
for(int i=0;i<=100;i++) {
sum+=i;
}
int k=0,sum2=0;
while(k<100) {
k++;
sum2+=k;
}
public int qiuhe(int m,int n) {
int sum=0;
for(int i=m;i<=n;i++) {
sum+=i;
}
return sum;
}
public void qiuhe2() {
int k=0,sum2=0;
while(k<100) {
k++;
sum2+=k;
}
System.out.println(sum2);
}
public static void main(String[] args) {
Test01 t=new Test01();
int a=t.qiuhe(3,100);
t.qiuhe2();
}
public int qiuhe(int m,int n) {
}
m和n是两个int类型变量,都被称为形参
时间调用时,传入的具体数值,被称为实参
for(int i=m;i<=n;i++) {
if(i%5==0) {
continue;
}
sum+=i;
}
for(int i=m;i<=n;i++) {
if(i%5==0) {
break;
}
sum+=i;
}
int []shuzuA= {1,2,3,4}; //shuzuA.length 获取数组的长度
int[] shuzuB=new int[10];
public class Dog {
public String name;
public String color;
public double age;
}
public class TestDog {
public static void main(String[] args) {
Dog d1=new Dog();
d1.name="憨憨";
d1.color="黑色";
d1.age=1.5;
Dog d2=new Dog();
d1.name="哈哈";
d1.color="白色";
d1.age=2.5;
System.out.println(d1.name+d1.color+d1.age);
System.out.println(d2.name+d2.color+d2.age);
}
}
public static void testDogS() {
Dog d1=new Dog();
d1.name="憨憨";
d1.color="黑色";
d1.age=1.5;
Dog d2=new Dog();
d1.name="哈哈";
d1.color="白色";
d1.age=2.5;
Dog d3=new Dog();
d1.name="大黄";
d1.color="黄色";
d1.age=2.2;
Dog[] dogs=new Dog[10];
dogs[0]=d1;
dogs[1]=d2;
dogs[2]=d3;
for(int i=0;i<dogs.length;i++) {
Dog gg=dogs[i];
if(gg!=null) {
System.out.println(gg.name+gg.color+gg.age);
}
}
}
public static void main(String[] args) {
TestDog.testDogS();
}
public class Dog {
public String name;
public String color;
public double age;
public int health;
// public Dog() { //默认构造函数
// age=2.5; //设置默认值
// }
public Dog(String name) {
this.name=name; //this 指当前对象
}
public void swim() {
System.out.println(name+"is swimming");
}
public void playBall() {
System.out.println(name+"is playing ball");
}
}
public class GameUi {
public static void main(String[] args) {
Dog d1=new Dog("憨憨");
Dog d2=new Dog("哈哈");
d1.color="黄色";
d2.color="黑色";
d1.swim();
d2.playBall();
}
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public static final String MALE="male";
public static final String FEMALE="female";
super(name); //由子类的构造函数向父类传参,此语句必须在第一行
is-a:子是夫,如:Dog is a pet
has-a
有些父类成员不能继承:
–private成员
–子类与父类不在同包,使用默认访问权限的成员
–构造方法
public abstract class Pet {}
public abstract void play(); //给面向接口编程做准备
public static final String FEMALE="雌性";
public static final double PAI=3.1415926;
public static User user=null;
System.out.println(Dbconfig.getDriverClassName());
Integer.parseInt("101");
String.format("¥ %(,.2f", money);
Static{
}
特点:1.当调用静态代码块所在类的方法和属性时,静态代码块会被最先执行(优先于构造函数)。2.静态代码块只能被调用一次
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void outUtilDate() { //获取当前的默认时间
Date date=new Date(); //获取当前的默认时间-----年月日小时分秒
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
String aa=sd.format(date);
System.out.println(date); //默认为date.toString()
System.out.println(aa);
}
public static void inputUtilDate() { //日期录入(文本转换日期对象)
String aa="2015-03-17";
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
try {
Date d=sd.parse(aa);
System.out.println(d.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
outUtilDate();
inputUtilDate();
}
}
pst.setDate(1, new java.sql.Date(birthday.getTime()));
java.util.Date birthday2=new java.sql.Date(1224);
注意:子转父是安全的,因为不会出现内存越界
public long getTime()
返回自1970年1月1日以来,由 Date对象表示的00:00:00 GMT的毫秒 数 。
结果 :自1970年1月1日以来,以此日期为准的00:00:00 GMT的毫秒数。
public Date(long date)
使用给定的毫秒时间值构造一个Date对象。 如果给定的毫秒值包含时间信息,则驱动程序将将时间组件设置为对应于零GMT的默认时区(运行应用程序的Java虚拟机的时区)。
参数 :date - 1970年1月1日以来的毫秒,GMT 00:00:00不超过8099的毫秒表示。负数表示1970年1月1日00:00:00 GMT之前的毫秒数。
public static void inputSqlDate() {
try {
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
java.util.Date birthday=sd.parse("1998-11-24");
Connection conn=null;
String sql="insert into tuser values(?,?,?,?)";
PreparedStatement pst= conn.prepareStatement(sql);
pst.setDate(1, new java.sql.Date(birthday.getTime()));
pst.execute();
//java.util.Date birthday2=new java.sql.Date(1224);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void inputSqlTimstamp() {
try {
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date optime=sd.parse("1998-11-24 12:24:07");
Connection conn=null;
String sql="insert into tuser values(?,?,?,?)";
PreparedStatement pst= conn.prepareStatement(sql);
pst.setTimestamp(1, new java.sql.Timestamp(optime.getTime()));
pst.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testCalendar() {
Calendar cal=Calendar.getInstance();
cal.setTime(new Date()); //日历对象
cal.add(Calendar.DAY_OF_MONTH,5);
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH);
int day=cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"年"+month+"月"+day+"日");
}
public static void outUtilDate() {
LocalDate date=LocalDate.now();
DateTimeFormatter df=DateTimeFormatter.ofPattern("MM/dd/yyyy");
String aa=date.format(df);
System.out.println(aa);
}
public static void inputUtilDate() {
String date="2018-10-01";
LocalDate aa=LocalDate.parse(date);//按默认ISODate格式
System.out.println(aa.toString());
String date2="07/23/2017";
DateTimeFormatter df=DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate bb=LocalDate.parse(date2,df);
System.out.println(bb.toString());
}
public static void testCalendar() {
LocalDate date=LocalDate.of(2017, 10, 8);
date=date.plusDays(10);
date=date.plusMonths(3);
int year=date.getYear();
int month=date.getMonthValue();
int day=date.getDayOfMonth();
System.out.println(year+"年"+month+"月"+day+"日");
}
在java8中jdbc的接口没有发生变化
Interface PreparedStatement
void setDate(int parameterIndex,Date x)
throws SQLException使用运行应用程序的虚拟机的默认时区将指定的java.sql.Date设置为给定的java.sql.Date值。 当驱动程序将其发送到数据库时,将其转换为SQL DATE值
void setTimestamp(int parameterIndex, Timestamp x)
将指定的参数设置为给定的 java.sql.Timestamp值。
在java8的java.sql.Date中新增了如下方法:
static Date valueOf(LocalDate date)
从一个LocalDate对象获取一个Date的实例,具有与给定的LocalDate相同的年,月和日的月值。
注意:为什么jdbc的接口仍然使用java.sql.Date和java.sql.TimeStamp?
为什么不把jdbc接口改成java.time.LocalDate和java.time.LoaclDateTime ?
java和javaEE主要是提供编程规范的,实现是由各个厂商来做的
如何把LocalDate转为java.sqlDate
public static void inputSqlDate() {
try {
LocalDate date=LocalDate.of(2016, 5, 8);
Connection conn=null;
String sql="insert into tuser values(?,?,?,?)";
PreparedStatement pst= conn.prepareStatement(sql);
java.sql.Date bb=java.sql.Date.valueOf(date); //转换
pst.setDate(1, bb);
pst.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void outputSqlDate() {
java.sql.Date date=new java.sql.Date(1224);
LocalDate aa=date.toLocalDate();
System.out.println(aa.toString());
}
public static void inputSqlTimstamp() {
try {
LocalDateTime time=LocalDateTime.of(2016, 5, 8,13,25);
Connection conn=null;
String sql="insert into tuser values(?,?,?,?)";
PreparedStatement pst= conn.prepareStatement(sql);
java.sql.Timestamp bb=java.sql.Timestamp.valueOf(time); //转换
pst.setTimestamp(1, bb);
pst.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void outputSqlTimstamp() {
java.sql.Timestamp bb=new java.sql.Timestamp(1224);
LocalDateTime time=bb.toLocalDateTime();
}